在主线程保持工作状态的同时如何在单独的线程中实现阻塞侦听功能

时间:2019-03-01 13:49:59

标签: python python-3.x multithreading

我在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()时主线程不会阻塞?

1 个答案:

答案 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.