Как используя 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)
→ Ссылка