Python:signal.pause()在Windows上等效
我的主应用程序线程产生了2个线程,我在主线程中捕获了SIGINT以很好地退出它们。 在linux上,我使用的是Python:signal.pause()在Windows上等效,python,windows,signals,Python,Windows,Signals,我的主应用程序线程产生了2个线程,我在主线程中捕获了SIGINT以很好地退出它们。 在linux上,我使用的是signal.pause(),它工作得非常好 在Windows上实现signal.pause()的最佳方法是什么? 我丑陋的解决方案是: my_queue.get(True, averylongtime) 然后在我的信号处理器的队列中放入一些东西。请注意,如果我没有指定超时,则不会捕获SIGINT。但我想知道是否有更好的解决办法 谢谢我用这个: #another: while not
signal.pause()
,它工作得非常好
在Windows上实现signal.pause()的最佳方法是什么?
我丑陋的解决方案是:
my_queue.get(True, averylongtime)
然后在我的信号处理器的队列中放入一些东西。请注意,如果我没有指定超时,则不会捕获SIGINT。但我想知道是否有更好的解决办法
谢谢我用这个:
#another:
while not self.quit:
# your code
# main
try:
# your code
except KeyboardInterrupt:
another.quit = True
time.sleep(5) # or wait for threading.enumerate() or similar
如果我想让它更健壮,比如说,在出现bug时退出:
except KeyboardInterrupt:
another.quit = True
signal.alarm(5)
time.sleep(6)
这样做的一个副作用是,除了:或除异常之外的
块,e:
(这不是你无论如何应该做的事情/很多)你必须预先设置,除了键盘中断:raise
,这样异常就不会被“吃掉”。我用它来捕捉windows上的ctrl-c。如果我在给管道或文件写信,或者你有什么。。我想优雅地退出。下面是一个玩具的例子
import signal
import sys
def signal_handler(signal, frame):
print('Process Interrupted!\n\a')
sys.exit(0)
signal.signal(signal.SIGINT,signal_handler)
#Rest of your code
如何生成SIGINT?如果它只是键盘上的a+C,那么你可以捕获键盘中断。否则,可能会引发Win32事件。您的部分答案在问题所在的Windows上不起作用。signal.alarm在Windows和FWIW@qarma上不可用。。。我对像signal.alarm这样在windows上工作的东西很感兴趣