Я хочу создать группу таймеров с различными задержками перед вызовом их функций обратного вызова.Я также хочу убедиться, что основной поток завершается только после завершения всех таймеров.Поэтому я присоединяюсь () к каждому потоку Таймера в конце основного потока:
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()
Это работает, но проблема в том, что в моей "настоящей" программе я могу создать сотни таймеров, ноПодавляющее большинство из них истечет ко времени окончания основного потока.Таким образом, глупо присоединяться () к большому количеству уже выполненных потоков.
В идеале callback () удаляет объект Timer из списка таймеров.Есть ли способ заставить callback () выяснить, в каком потоке он находится?Другое решение было бы, если бы существовало значение Timer.already_ran (), которое я мог бы использовать, чтобы проверить, что обратный вызов таймера уже выполнен.
Есть ли способ сделать одно из этих решений?Или другой, о котором я не думал.