while True:
try:
queries_semaphore.acquire()
query = queries.pop(0)
# Do some stuff ...
info('Query executed: `%s\'' % str(query))
except KeyboardInterrupt:
okay('quit')
break
问题在于,仅在querys_semaphore.acquire()返回之后才引发KeyboardInterrupt,因此用户无法使用Ctrl-C来中断程序.在这种情况下,什么是好的解决方案?
解决方法:
我将为query_semaphore.acquire()部分创建另一个线程,并保留主线程与用户交互.如果用户按Ctrl-C,则应该通过设置信号量并完成它来解除阻塞工作线程.