Удостоверьтесь, что нанизывание - PullRequest
0 голосов
/ 09 июля 2019

Я хочу создать группу таймеров с различными задержками перед вызовом их функций обратного вызова.Я также хочу убедиться, что основной поток завершается только после завершения всех таймеров.Поэтому я присоединяюсь () к каждому потоку Таймера в конце основного потока:

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 (), которое я мог бы использовать, чтобы проверить, что обратный вызов таймера уже выполнен.

Есть ли способ сделать одно из этих решений?Или другой, о котором я не думал.

...