Остановка потока через определенное время
Я хочу прекратить некоторые потоки через определенное время. Эти потоки будут запускать бесконечный цикл while, и за это время они могут останавливаться на случайное, большое количество времени. Поток не может длиться дольше, чем время, заданное переменной продолжительности.
Как я могу сделать это после длины, заданной длительностью, потоки прекращаются.
def main():
t1 = threading.Thread(target=thread1, args=1)
t2 = threading.Thread(target=thread2, args=2)
time.sleep(duration)
#the threads must be terminated after this sleep
Ответы
Ответ 1
Это будет работать , если вы не блокируете.
Если вы планируете делать сон, абсолютно необходимо, чтобы вы использовали это мероприятие для сна. Если вы используете событие для сна, если кто-то говорит вам остановиться, пока он "спит", он проснется. Если вы используете time.sleep()
, ваш поток будет остановлен только после его просыпания.
def main():
t1_stop= threading.Event()
t1 = threading.Thread(target=thread1, args=(1, t1_stop))
t2_stop = threading.Event()
t2 = threading.Thread(target=thread2, args=(2, t2_stop))
time.sleep(duration)
#stop the thread2
t2_stop.set()
def thread1(arg1, stop_event):
while(not stop_event.is_set()):
#similar to time.sleep()
stop_event.wait(time)
pass
def thread2(arg1, stop_event):
while(not stop_event.is_set()):
stop_event.wait(time)
pass
Ответ 2
Если вы хотите, чтобы потоки остановились, когда ваша программа выйдет (как это подразумевается в вашем примере), создайте им темы демона.
Если вы хотите, чтобы ваши потоки умирали по команде, вам нужно сделать это вручную. Существуют различные методы, но все они связаны с проверкой в вашем потоковом цикле, чтобы проверить, не осталось ли времени для выхода (см. Пример Nix).