我想创建一堆具有不同延迟的计时器,然后再调用它们的回调函数。我还想确保主线程仅在所有计时器完成后才退出。因此,我在主线程末尾的每个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()值,我可以用来验证计时器回调已完成。
有没有办法做这些解决方案之一?或其他我没想到的。