Ctrl-C无法中断semaphore.acquire

3 投票
1 回答
527 浏览
提问于 2025-04-16 17:09
while True:
    try:
        queries_semaphore.acquire()
        query = queries.pop(0)
        # Do some stuff ...
        info('Query executed: `%s\'' % str(query))
    except KeyboardInterrupt:
        okay('quit')
        break

这个问题是因为 KeyboardInterrupt 只有在 queries_semaphore.acquire() 执行完后才会被触发,所以用户无法通过按 Ctrl-C 来中断程序。那么在这种情况下,有什么好的解决办法呢?

1 个回答

3

我会为查询的那部分创建一个新的线程,这样主线程就可以专门用来和用户互动。如果用户按下Ctrl-C键,那么你应该通过设置信号量来解除工作线程的阻塞,让它完成任务。

撰写回答