Ctrl-C无法中断semaphore.acquire
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键,那么你应该通过设置信号量来解除工作线程的阻塞,让它完成任务。