线程在Python中随机停止

时间:2016-04-18 16:53:36

标签: python multithreading

我一直在使用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 ,此线程才会停止。

2 个答案:

答案 0 :(得分:3)

你已经得到了必要的答案,但是你需要注意一个细节:当主程序结束时,作为关机处理的一部分,Python会在由所创建的所有非守护程序线程上调用.join()threading模块。您覆盖.join(),因此Python调用您的 .join()。这反过来会设置事件,因此您的.run()方法会以静默方式退出。

答案 1 :(得分:2)

main 线程结束时,程序结束。

线程在主要线程停止之前循环的次数相当随意。 (由操作系统来安排)