2011-05-06 44 views
2
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程序。在这种情况下什么是一个好的解决方案?按Ctrl-C不会中断semaphore.acquire

回答

2

我会为queries_semaphore.acquire()部分创建另一个线程,并让主线程与用户交互。如果用户点击Ctrl-C,那么你应该通过设置信号量来解除工作线程并完成它。