Я ищу библиотеку в Python, которая будет предоставлять at
и cron
нравится функциональность.
Мне бы очень хотелось иметь чисто Python-решение, а не полагаться на инструменты, установленные на коробке; таким образом я бегу на машинах без cron.
Для тех, кто не знаком с cron
: вы можете планировать задачи на основе выражения, как:
0 2 * * 7 /usr/bin/run-backup # run the backups at 0200 on Every Sunday
0 9-17/2 * * 1-5 /usr/bin/purge-temps # run the purge temps command, every 2 hours between 9am and 5pm on Mondays to Fridays.
Синтаксис выражения времени cron менее важен, но я хотел бы иметь что-то с такой гибкостью.
Если бы не было чего-то, что могло бы сделать это для меня из коробки, с благодарностью были бы приняты любые предложения для строительных блоков, чтобы сделать что-то подобное.
Edit Я не заинтересован в запуске процессов, просто "рабочие места" также написаны на Python - функции Python. По необходимости я думаю, что это будет другой поток, но не в другом процессе.
Для этого я ищу выразительность выражения времени cron, но в Python.
Крон существует уже много лет, но я стараюсь быть максимально портативным. Я не могу положиться на его присутствие.
источник
Ответы:
Если вы ищете что-то легкое расписание оформления заказа :
Раскрытие информации : я автор этой библиотеки.
источник
schedule
. Это хорошо сработало для меня. Было бы еще лучше, если бы у него был cron-подобный синтаксис и поддерживаемые декораторы (смотрите crython, но не используйте эту библиотеку, потому что она не работает; планирование, кажется, написано не очень хорошо).do()
функция перенаправляет дополнительные аргументы, которые вы передаете ей, в функцию job: schedule.readthedocs.io/en/stable/api.html#schedule.Job.do Например, вы можете сделать это :schedule.every().hour.do(job, param1, param2)
Нет необходимости использовать лямбду. Надеюсь, это поможет :)Вы можете просто использовать обычный синтаксис передачи аргументов Python, чтобы указать свой crontab. Например, предположим, что мы определяем класс Event, как показано ниже:
(Примечание: не полностью проверено)
Тогда ваш CronTab может быть указан в обычном синтаксисе python как:
Таким образом, вы получаете все возможности механики аргументов Python (смешивая позиционные и ключевые аргументы, и можете использовать символические имена для названий недель и месяцев)
Класс CronTab будет определен как просто спящий с шагом в минуту и вызывающий check () для каждого события. (Возможно, есть некоторые тонкости с летним временем / часовыми поясами, которые следует с осторожностью относиться). Вот быстрая реализация:
Несколько вещей, на которые следует обратить внимание: дни / месяцы Python имеют нулевое индексирование (в отличие от cron), и этот диапазон исключает последний элемент, поэтому синтаксис, такой как «1-5», становится range (0,5) - то есть [0,1,2, 3,4]. Если вы предпочитаете синтаксис cron, его синтаксический анализ не должен быть слишком сложным.
источник
pip install anything
:)возможно, это возникло только после того, как был задан вопрос; Я думал, что просто упомяну это для полноты: https://apscheduler.readthedocs.org/en/latest/
источник
Одна вещь, которую я видел в моих поисках, это
sched
модуль Python, который может быть тем, что вы ищете.источник
«... Модуль Crontab для чтения и записи файлов crontab и автоматического доступа к системному cron с помощью прямого API. ...»
http://pypi.python.org/pypi/python-crontab
а также APScheduler, пакет для Python. Уже написано и отлажено.
http://packages.python.org/APScheduler/cronschedule.html
источник
Более или менее такой же, как указано выше, но одновременно с использованием Gevent :)
источник
Ни одно из перечисленных решений даже не пытается проанализировать сложную строку расписания cron. Итак, вот моя версия с использованием croniter . Основная суть:
Вспомогательные процедуры:
источник
elif
? Я использую расписание, например"* * * * *"
добавляюtime.sleep
более 1 минуты в «Делай свои периодические действия»if
, но я всегда вижу вещи в этом операторе if. Когда это занимает более 1 минуты, я просто вижу, как цикл while пропускает выполнение отсутствующего цикла.Я изменил сценарий.
Легко использовать:
Попробуйте запустить задание в первую секунду минуты.
Код на Github
источник
У меня есть небольшое исправление для метода запуска класса CronTab, предложенного Брайаном .
Время истекло на одну секунду, что привело к жесткому циклу в одну секунду в конце каждой минуты.
источник
Для этого нет «чистого Python», потому что какой-то другой процесс должен запустить Python, чтобы запустить ваше решение. У каждой платформы будет один или двадцать различных способов запуска процессов и отслеживания их прогресса. На платформах Unix cron - это старый стандарт. В Mac OS X также есть launchd, который сочетает в себе cron-подобный запуск с функцией сторожевого таймера, которая может поддерживать ваш процесс, если вы этого хотите. Когда Python запущен, вы можете использовать модуль sched для планирования задач.
источник
Я знаю, что ответов много, но другим решением может стать использование декораторов . Это пример повторения функции каждый день в определенное время. Хорошая мысль об использовании этого способа заключается в том, что вам нужно всего лишь добавить синтаксический сахар в функцию, которую вы хотите запланировать:
И декоратор будет выглядеть так:
источник
Решение Брайана работает довольно хорошо. Однако, как отмечали другие, в коде выполнения есть небольшая ошибка. Также я нашел это слишком сложным для нужд.
Вот моя более простая и функциональная альтернатива для запуска кода на случай, если это кому-нибудь понадобится:
источник
Другое тривиальное решение было бы:
И класс aqcron.At это:
источник
Если вы ищете распределенный планировщик, вы можете проверить https://github.com/sherinkurian/mani - он действительно нуждается в повторном редактировании, хотя, возможно, это не то, что вы ищете. (обратите внимание, что я являюсь автором) это было построено для обеспечения отказоустойчивости за счет запуска часов более чем на одном узле.
источник
Я не знаю, существует ли что-то подобное. Было бы легко написать свой собственный модуль времени, даты и / или календаря, см. Http://docs.python.org/library/time.html.
Единственная забота для решения питона является то , что ваши потребности работу , чтобы быть всегда работает , и , возможно , будет автоматически «воскресли» после перезагрузки, что - то , для которого вы делаете необходимость полагаться на системы зависимых решений.
источник
Вы можете проверить [1] Crons PiCloud [2], но учтите, что ваши задания не будут выполняться на вашем компьютере. Это также услуга, за которую вам нужно будет платить, если вы используете более 20 часов вычислительного времени в месяц.
[1] http://www.picloud.com
[2] http://docs.picloud.com/cron.html
источник
Метод Crontab на сервере.
Имя файла Python hello.py
Шаг 1: Создайте файл sh, дайте имя s.sh
Шаг 2: Откройте редактор Crontab
Шаг 3: Добавить расписание по времени
Используйте форматирование Crontab
Этот cron будет работать «На второй минуте».
источник
Мне нравится, как пакет pycron решает эту проблему.
источник