Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:signal.pause()在Windows上等效_Python_Windows_Signals - Fatal编程技术网

Python:signal.pause()在Windows上等效

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

我的主应用程序线程产生了2个线程,我在主线程中捕获了SIGINT以很好地退出它们。 在linux上,我使用的是
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上工作的东西很感兴趣