Как используя threading.Event остановить поток?
Возможно, приведенный ниже код логически неверен.
import time, schedule, threading
from threading import Thread
def job1():
print("Work job1")
def job2():
print("Work job2")
schedule.every(1).minutes.do(job1)
schedule.every(10).seconds.do(job2)
while True:
schedule.run_pending()
time.sleep(1)
thread = Thread(target=run)
thread.start()
Как остановить вывод job2 при помощи threading.Event
Ответы (1 шт):
Автор решения: day383
→ Ссылка
Вот, возможно не самый правильный способ это сделать, но я не нашёл как получить значение количества запусков функции из schedule, как и передать ей изменяемый аргумент, поэтому для счётчика используется global. В любом случае: здесь работа 2 выключается после того, как работа 1 отработает 4 раза. После того, как работа 1 отрабатывает 4 раза, она активирует событие event. Последнее фиксируется функцией on_event, которая прослушивает event каждую секунду. Если она обнаруживает, что event установлен, то on_event выключает работу 2.
import time, schedule
from threading import Thread, Event
job1_counter = 0
def job1():
global job1_counter
print("\t\tWork job1")
job1_counter += 1
if job1_counter == 4:
event.set()
def job2():
print("\t\tWork job2")
def on_event():
while not event.wait(1):
print("on_event listener")
del schedule.jobs[1]
print("\t\t\tJob2 stopped.")
print("on_event listener closed")
schedule.every(2).seconds.do(job1)
schedule.every(1).seconds.do(job2)
event = Event()
thread = Thread(target=on_event)
thread.start()
while True:
schedule.run_pending()
time.sleep(1)