Запустите Python в определенное время - PullRequest
0 голосов
/ 25 сентября 2019

Я работаю над программой на Python.Это должно работать каждые 15 минут.В настоящее время он ждет 870 секунд (14,5 минут) перед повторным запуском, но поскольку время, необходимое для завершения действия, варьируется, иногда оно запускается до того, как прошло 15 минут с момента его последнего запуска, иногда через 15 минут.

Мой код для этой части в настоящее время выглядит следующим образом:

print(colour.BOLD, colour.PURPLE, "Finished", colour.END)
    print(colour.BOLD, colour.BLUE, 'WAITING 15 MINUTES (900 SECONDS)', colour.END)
    time.sleep(870)

Есть ли способ заставить его работать при xx: 15, xx: 30, xx: 45, xx: 00 где хх каждый час с 00 до 23?

Извините, если я запутался здесь.Спасибо за любую помощь заранее.

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Используйте инструменты вашей ОС для достижения аналогичных результатов.

Они очень надежны и, в случае сбоя вашего скрипта, в следующий раз будут работать.

Linux
Используйте crontab.
Как его настроить, немного изменится в зависимости от вашего дистрибутива.

Общая идея:

sudo crontab -e

Внутри записи в crontab (не забудьте настроить путь к исполняемому файлу Python и пути к скрипту):

*/15 * * * * /usr/bin/python /path/to/your/script.py

Это обеспечитчто ваш сценарий выполняется каждые 15 минут.

Windows
Как запланировать задачу в Windows, в большей степени зависит от используемой версии Windows, и это очень наглядная задача.Поиск в Google «Как запланировать задачу в Windows» вернет гораздо лучшие / более конкретные / обновленные результаты, чем тот, который я мог бы неуклюже объяснить здесь.

Здесь хороший пример, который я нашел дляyou.

Mac
Прочитайте удивительный ответ Меки здесь, на StackOverflow.

1 голос
/ 25 сентября 2019

Я бы использовал модуль schedule: https://pypi.org/project/schedule/

, который вы бы запустили:

schedule.every().minute.at(":00").do(job)
schedule.every().minute.at(":15").do(job)
schedule.every().minute.at(":30").do(job)
schedule.every().minute.at(":45").do(job)
0 голосов
/ 25 сентября 2019

Наличие сценария, который делает что-то через определенные промежутки времени, взяв под контроль свою собственную судьбу, делает меня бледным.Я бы использовал внешнюю структуру планирования для выполнения этой работы с дискретными интервалами.В Linux это можно сделать с помощью cronjobs;в Windows это можно сделать с помощью Task Scheduler.

Linux: В терминале введите

crontab -e

, чтобы отредактировать расписание cron для текущего пользовательского контекста.Документы по редактированию cron можно найти по всему Интернету. Вот один из них: https://www.raspberrypi.org/documentation/linux/usage/cron.md

Windows: вы можете запланировать запуск сценария python по этому расписанию в планировщике задач Windows.вот ссылка, проходящая через это: https://www.esri.com/arcgis-blog/products/product/analytics/scheduling-a-python-script-or-model-to-run-at-a-prescribed-time/

обязательно используйте опции «если задача уже выполняется» и «запустить задачу как можно скорее после того, как запланированный запуск пропущен», если вы выполните этот методконтролировать соответствующее поведение: enter image description here

...