threading.Timer是否在单独的线程中打开一个函数?

时间:2015-10-01 22:59:07

标签: python multithreading

当我使用threading.Timer调用函数时,如下所示:

threading.Timer(LOOP_TIME,self.broadCast).start()

broadCast是否在单独的线程中运行?或者它只是在同一个线程? 我使用threading.Timer所以我可以在每隔这么长的时间间隔调用一个函数。我不希望在主线程之外调用broadCast函数。

1 个答案:

答案 0 :(得分:2)

是。您可以查看Python threading.py源代码:

def Timer(*args, **kwargs):
    """Factory function to create a Timer object.

    Timers call a function after a specified number of seconds:

        t = Timer(30.0, f, args=[], kwargs={})
        t.start()
        t.cancel()     # stop the timer's action if it's still waiting

    """
    return _Timer(*args, **kwargs)

class _Timer(Thread):
    """Call a function after a specified number of seconds:

            t = Timer(30.0, f, args=[], kwargs={})
            t.start()
            t.cancel()     # stop the timer's action if it's still waiting

    """

    def __init__(self, interval, function, args=[], kwargs={}):
        Thread.__init__(self)
        self.interval = interval
        self.function = function
        self.args = args
        self.kwargs = kwargs
        self.finished = Event()

Source code available in Python source code repository

如果你想要计时器而你的主线程没有进行合作多任务处理,我建议你重构你的代码,以便你可以从其他线程中使用它。