я хочу понять echedule.every().day.at как это может быть параллельно с другим потоком

#python #schedule

#python #Расписание

Вопрос:

Мне нужна помощь, пожалуйста, я использую schedule.every().day.at («17:40»).do(my_function) и я хотел бы, чтобы моя программа работала нормально и при выполнении schedule.every().day.at («17:40»).do(my_function) прибывает, он выполняет соответствующую функцию, но затем возвращается в мой цикл и ждет другого дня и т.д…. Я не знаю, как это сделать, потому что я думаю, schedule.every() .day.at («17:40»).нужно ли (my_function) while1: schedule.run_pending() time.sleep(1) Поэтому я не знаю, как изменить эти 3 лигна, чтобы заставить мою программу работать. Спасибо!

Комментарии:

1. запустите его в отдельном потоке.

2. да, спасибо, но как я могу это сделать, пожалуйста?

3. поиск информации о потоковой или многопроцессорной обработке модулей. Там должно быть много обучающих программ (даже видео). И есть много вопросов и ответов на Stackoverflow.

4. но сначала вы должны проверить документацию , потому что я нашел там, как непрерывно запускать планировщик, не блокируя основной поток? — это швы, они уже продеты в нитку, и вам нужно бежать run_continuously()

Ответ №1:

Вам придется запускать его в раздельной потоковой или многопроцессорной обработке.

Но сначала вы должны проверить документацию, потому что я нашел в Common Questions :

Как непрерывно запускать планировщик, не блокируя основной поток?

Они создали класс Scheduler , который поместил его в поток, и вам нужно запустить run_continuously()

Но я использую его для создания более короткого примера

 import schedule
import time
import threading

# --- functions ---

stop_running = threading.Event()  # to control loop in thread

def run_continuously(scheduler, interval=1):
    #print('starting loop in thread')
    while not stop_running.is_set():
        schedule.run_pending()
        time.sleep(interval)
    #print('stoping loop in thread')

def job():
    print("I'm working...")

# --- main ---

schedule.every(1).minutes.do(job)

# run schedule in thread
schedule_in_thread = threading.Thread(target=run_continuously, args=(schedule,))
schedule_in_thread.start()

# run other code

#print('starting main loop')

try:

    while True:
        print("other code")
        time.sleep(3)

except KeyboardInterrupt as ex:
    print('stoping', ex)

#print('stoping main loop')

# stop schedule in thread

stop_running.set()        # to stop loop in `run_continuously`
schedule_in_thread.join() # wait until thread finish
 

Я использую try/except with KeyboardInterrupt только для корректной остановки программы при нажатии Ctrl C — и код может остановить поток.