确保线程完成。计时器在主线程之前完成

时间:2019-07-09 16:01:45

标签: python multithreading timer callback python-multithreading

我想创建一堆具有不同延迟的计时器,然后再调用它们的回调函数。我还想确保主线程仅在所有计时器完成后才退出。因此,我在主线程末尾的每个Timer线程都加入了join():

from __future__ import print_function
import threading

def callback(arg):
    some_func_that_might_take_seconds_to_return()
    print(arg)

timers = []

for i in range(5):
    # Note variable interval values.
    timer = threading.Timer(i, callback, args=(i,))
    timers.append(timer)
    timer.start()

for timer in timers:
    timer.join()

这有效,但是问题是在我的“真实”程序中,我可能创建了数百个计时器,但是其中的绝大多数将在主线程结束时过期。因此,在大量已经完成的线程上加入join()似乎很愚蠢。

理想情况下,callback()将从计时器列表中删除Timer对象。有没有一种方法可以使callback()找出它在哪个线程中?另一个解决方案是,如果有一个Timer.already_ran()值,我可以用来验证计时器回调已完成。

有没有办法做这些解决方案之一?或其他我没想到的。

0 个答案:

没有答案