我在main.py模块中有main方法,该方法在另一个名为listener.py的模块中调用一个方法。他们看起来像这样。
main.py
def main():
listener.start_server()
print("Test")
listener.py
def start_server():
t_server = threading.Thread(target=server.start)
t_server.start()
# signal.pause()
侦听器线程正在另一个名为server.py的模块中调用类函数,该模块具有 WHILE 循环被阻塞。
我不想阻止我的主要方法,并且确实可以打印(“测试”)。但是,比起我无法在侦听线程中捕获KeyboardInterrupt,这就是为什么我需要 signal.pause()的原因。当我使用signal.pause()时,主线程会阻塞,并且在侦听线程完成之前不会执行print语句。有什么方法可以将这两者结合在一起,以便在使用signal.pause()时主线程不会阻塞?
答案 0 :(得分:1)
对于所有会遇到此问题的人来说,简单的解决方案是: 安装信号处理程序,请勿使用signal.pause()
通过实现信号处理程序,main方法将继续工作,即创建线程的方法将不会阻塞。这是我没有遇到过的简单解决方案。
因此,不要使用:signal.pause()
使用这个:
def start_server():
t_server = threading.Thread(target=server.start)
t_server.start()
# signal.pause()
signal.signal(signal.SIGINT, handler)
def handler(signum, frame):
... # do whaterver you want to do, throw an exception, close your resources etc.