Python中的多线程,最后没有使用time.sleep?

时间:2016-01-05 10:09:38

标签: python multithreading python-multithreading

所以我正在尝试使用我在网上找到的这个代码段在后台运行一些代码。然而,我的主要问题是我试图让它工作而不使用最后的time.sleep(3)并且似乎无法弄明白。有什么建议?为什么它最终只能与time.sleep(n)一起使用?

import threading
import time


class ThreadingExample(object):
    """ Threading example class
    The run() method will be started and it will run in the background
    until the application exits.
    """

    def __init__(self, interval=1):
        """ Constructor
        :type interval: int
        :param interval: Check interval, in seconds
        """
        self.interval = interval

        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True                            # Daemonize thread
        thread.start()                                  # Start the execution

    def run(self):
        """ Method that runs forever """
        while True:
            # Do something
            print('Doing something imporant in the background')

            time.sleep(self.interval)

example = ThreadingExample()
time.sleep(3)
print('Done')

2 个答案:

答案 0 :(得分:2)

你看到这一行

thread.daemon = True                            # Daemonize thread

这意味着你的线程将在程序结束时退出(主线程)。如果你不放

time.sleep(3)

你的程序退出的速度太快,以至于线程很可能在退出之前什么都不做......

答案 1 :(得分:2)

当python退出时,所有守护程序线程都被终止。如果你过早退出,执行重要后台工作的线程将被杀死befaore实际运行。

现在你的后台工作使用while True;也许你想用一些实际的退出条件替换它,并在退出之前加入线程。