程序立即终止,而忽略守护线程中的time.sleep()

时间:2018-11-05 12:13:27

标签: python multithreading sleep

我有一个正在调用如下所示线程的类。

import threading
import time

class ThreadingExample:
    def __init__(self):
        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True                           
        thread.start()                                 

    def run(self):

        # Do something
        print('Doing something important in the background')

        time.sleep(100)

        # a print statement will not be executed here even with flush=True

example = ThreadingExample()

但是,sleep无法正常工作。自从运行run()中的第一次打印起执行该线程,但是该程序在print语句后立即终止。

出于测试目的,我在sleep(100)之后插入了另一个打印语句,但该语句也不打印。这是什么问题?

此代码应完整且可复制

1 个答案:

答案 0 :(得分:2)

问题是这一行:

thread.daemon = True

来自threading documentation

  

可以将一个线程标记为“守护程序线程”。的意义   标志是只有守护程序线程时,整个Python程序都会退出   剩下。

由于您已将线程设为守护程序线程,因此python在退出程序之前不会等待其完成。一旦主线程执行完代码,守护程序线程就会被杀死,程序退出。

有两种方法可以解决此问题:

  1. 删除thread.daemon = True分配,以便python将等待您的线程退出。
  2. 通过调用thread.join()显式等待线程完成。