#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 — и код может остановить поток.