#python-3.x #scheduling #job-scheduling
#python-3.x #планирование #планирование заданий
Вопрос:
Я хочу запланировать запуск скрипта на Python на каждый рабочий день (с понедельника по пятницу) в 8 часов вечера по центральноевропейскому времени. Как это можно сделать.
import schedule
import time
def task():
print("Job Running")
schedule.every(10).minutes.do(task)
Как это можно сделать.
Ответ №1:
Есть ли причина, по которой вы не можете использовать crontab или планировщик задач Windows для планирования своих заданий?
Ответ один:
В schedule
документации модуля не указан простой способ запланировать запуск скрипта Python на каждый рабочий день (с понедельника по пятницу) в 8 часов вечера по центральноевропейскому времени.
Кроме того, использование часовых поясов не поддерживается в schedule
модуле.
Ссылка: 4.1.3 Поддерживает ли расписание часовые пояса?
Вот способ запланировать запуск задания каждый рабочий день в 20:00 (8 вечера) с помощью schedule
модуля.
import schedule
import time
def schedule_actions():
# Every Monday task() is called at 20:00
schedule.every().monday.at('20:00').do(task)
# Every Tuesday task() is called at 20:00
schedule.every().tuesday.at('20:00').do(task)
# Every Wednesday task() is called at 20:00
schedule.every().wednesday.at('20:00').do(task)
# Every Thursday task() is called at 20:00
schedule.every().thursday.at('20:00').do(task)
# Every Friday task() is called at 20:00
schedule.every().friday.at('20:00').do(task)
# Checks whether a scheduled task is pending to run or not
while True:
schedule.run_pending()
time.sleep(1)
def task():
print("Job Running")
schedule_actions()
Ответ второй:
Я потратил некоторое дополнительное время на изучение использования планировщика внутри скрипта Python. Во время моего исследования я обнаружил библиотеку Python — Advanced Python Scheduler ( APScheduler
).
Эта библиотека кажется очень гибкой на основе документации модуля.
Вот пример, который я собрал для вас, который сработал в моем тестировании.
from apscheduler.schedulers.background import BlockingScheduler
# BlockingScheduler: use when the scheduler is the only thing running in your process
scheduler = BlockingScheduler()
# Other scheduler types are listed here:
# https://apscheduler.readthedocs.io/en/latest/userguide.html
# Define the function that is to be executed
# at a scheduled time
def job_function ():
print ('text')
# Schedules the job_function to be executed Monday through Friday at 20:00 (8pm)
scheduler.add_job(job_function, 'cron', day_of_week='mon-fri', hour=20, minute=00)
# If you desire an end_date use this
# scheduler.add_job(job_function, 'cron', day_of_week='mon-fri', hour=20, minute=00, end_date='2019-12-31')
# Start the scheduler
scheduler.start()