我一直在使用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 ,此线程才会停止。
答案 0 :(得分:3)
你已经得到了必要的答案,但是你需要注意一个细节:当主程序结束时,作为关机处理的一部分,Python会在由所创建的所有非守护程序线程上调用.join()
。 threading
模块。您覆盖.join()
,因此Python调用您的 .join()
。这反过来会设置事件,因此您的.run()
方法会以静默方式退出。
答案 1 :(得分:2)
当 main 线程结束时,程序结束。
线程在主要线程停止之前循环的次数相当随意。 (由操作系统来安排)