今天写一个小工具,开启多个线程,在子线程里循环执行任务,发现不能退出程序,然后折腾了半天,还是退出不了,最后发现,原来是个bug
先上简化了的代码:
import sys
import threading
import signal
import time
class myThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
time.sleep(1)
def handler(signum, frame):
print("exit")
sys.exit()
if __name__ == "__main__":
signal.signal(signal.SIGINT, handler)
threads = []
for _ in range(0,2):
t = myThread()
t.setDaemon(True)
threads.append(t)
t.start()
for _ in range(0,2):
t.join()
# while True:pass

本文探讨了在Python中使用多线程和join方法时遇到的一个问题,即主线程调用join方法后无法响应SIGINT信号。作者通过代码示例展示了这个问题,并指出在Python2中这是一个已知的bug,但在Python3中已被修复。解决方案是使用join的timeout参数或避免使用join,改为使用while循环来监控子线程。同时,作者提到这个问题的详细讨论链接和一个简单的解决办法。
最低0.47元/天 解锁文章
3158

被折叠的 条评论
为什么被折叠?



