我一直在玩 Python 中的线程,我发现了一些有趣的代码:
import time
import threading
class Update(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.stop_event = threading.Event()
def join(self, timeout=None):
self.stop_event.set()
threading.Thread.join(self, timeout)
def run(self):
while not self.stop_event.isSet():
print("test")
thread = Update()
thread.start()
即使我不调用 join() 方法,这段代码也会随机停止。结果,我得到了如下不同的输出:
test@debian:~/$ python3 test.py
test
test
test
test
test@debian:~/$ python3 test.py
test
test
test
test
test
test
test
test@debian:~/$ python3 test.py
test
test
为什么这段代码会随机停止?我以为只有设置stop_event这个线程才会停止。
你已经得到了基本的答案,但有一个细节你需要注意:当主程序结束时,作为关闭处理的一部分,Python 在所有非守护进程上调用 .join()
threading
模块创建的线程。您覆盖了 .join()
,因此 Python 调用您的 .join()
。这反过来会设置事件,因此您的 .run()
方法会静默退出。
我是一名优秀的程序员,十分优秀!