Вы можете использовать Crontab, или вы можете использовать это

Запуск задач по расписанию — не редкость. Практически каждый программист так делает.

Стандартный метод планирования — использование заданий Cron. Я не возражаю против использования Cron и по-прежнему считаю, что это стабильный способ.

Но что, если вам нужен планировщик, полностью написанный на Python? Что, если вы также хотите, чтобы его было проще настроить?

Вот в чем суть этого поста.



Планирование задач в Python

Планирование задач в Python упрощается с помощью пакета Python под названием schedule. Вы можете установить его из репозитория PyPI.

$ pip install schedule
# If you're using poetry instead of virtualenv
poetry add schedule

В расписании используется знакомый шаблон построителя. Это позволяет вам строить расписания почти так же, как если бы вы говорили на естественном языке. То есть, если вы хотите запускать функцию (скажем, send_email) один раз в час, вы можете сделать это так:

schedule.every().hour.do(send_email)

Это очень похоже на обычный разговор, не так ли? Вот полный скрипт для отправки писем по расписанию, но раз в день, а не каждый час.

Приведенный выше код вызовет функцию send_email в 14:45 по системному времени.

Помимо простоты планирования, пакет предлагает ряд других функций.

Планирование с декоратором

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

Пакет «расписание» поддерживает декораторов из коробки. Вот наш пример отправки электронных писем, на этот раз с помощью декораторов.

В приведенном выше примере вы также можете видеть, что мы сделали два запланированных для одной и той же задачи. Первый будет вызывать функцию каждые 10 секунд. Второй будет вызывать его каждые 5 секунд.

Запуск запланированных задач с параметрами

Само по себе планирование не очень полезно. Часто нам требуется больший контроль над выполнением функции. Мы делаем это, передавая аргументы.

Как мы видим, наша функция отправки электронной почты принимает необязательный аргумент, адрес электронной почты. При планировании мы можем передавать параметры в качестве аргументов ключевого слова.

Это всего лишь несколько примеров использования библиотеки в Python. Пожалуйста, обратитесь к официальной документации за более ценными примерами.

Планирование задач с помощью cron tab — обычный способ.

Crontab — самый популярный метод запуска запланированных задач. Он известен по нескольким причинам.

Один из них предоставляется ОС. Кронтаб предназначен для Linux. Даже пользователи Windows могут использовать Crontab с помощью WSL.

Другая причина в том, что Crontab не зависит от языка программирования задач. Вы также можете использовать ту же технику для запуска скрипта node js.

Во-первых, нам нужно изменить наш код, чтобы он выполнялся по запросу, а не по расписанию, потому что Crontab позаботится о расписании.

Я использовал модуль argparse в приведенной выше версии для принятия аргументов командной строки. Вы также можете использовать Typer для создания более продвинутых интерфейсов командной строки в Python.



Мы можем запустить приведенный выше скрипт в нашем терминале следующим образом:

$ python send_mail.py -e [email protected]
# OR without any arguments
$ python send_email.py

Мы можем начать редактирование Crontab с помощью следующей команды.

crontab -e

Командная строка попросит вас выбрать редактор при первом редактировании. Я выбрал vim, так как мне это удобно. Но вы можете выбрать что угодно.

Я добавил следующую строку в конец файла.

45 14 * * * /<ENV_PATH>/env/bin/python /<PROJECT PATH>/send_email.py -e [email protected]

Эта конфигурация указывает Crontab запускать скрипт send_email.py каждый день в 14:45. Сохраните его и закройте файл. Ваш скрипт должен работать как положено.

Если вам непонятны настройки crontab, мой лучший совет — использовать crontab.guru.

Расписание Crontab или Python?

Оба инструмента отлично подходят для планирования задач. Но в зависимости от обстоятельств одно работает лучше другого.

Плюсом расписания Python является его гибкость и удобство. Любой может понять расписание, просто прочитав его. Вам даже не нужно обращаться к документации.

Хотя конфигурации crontab не так уж сложны для понимания, новичкам потребуется немного усилий, чтобы понять их.

Все находится в одном месте, что упрощает работу с библиотекой расписаний. В Crontab вам придется редактировать файл конфигурации вне модуля, который вы разрабатываете. Если кто-то еще захочет использовать ваше приложение, вам придется проинструктировать его.

Кроме того, если я хочу создать новое расписание, все, что мне нужно сделать, это аннотировать функцию другим. @repeat . Кроме того, в Crontab вы должны добавить еще одну строку конфигурации. Но не так быстро, как в сценарии Python.

Эти плюсы делают библиотеку расписаний Python подходящей для большинства случаев использования. Но взгляните на страницу документации библиотеки.

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

Последние мысли

Запуск задач по расписанию часто требуется при разработке программного обеспечения. Я часто нахожу полезным запускать небольшие продуктивные лайфхаки, которые я делаю на ходу.

Я использую Crontab уже несколько лет, думая, что это единственный способ выполнить работу. Но библиотека расписания Python сделала это очень простым.

Это может быть не идеальный инструмент для каждого случая. Но не все, что мы делаем ежедневно, требует более сложных методов.

Теперь я преобразовал многие такие периодические выполнения в расписания Python.

Спасибо за прочтение, друг! Передайте мне привет в LinkedIn, Twitter и Medium.

Еще не являетесь участником Medium? Пожалуйста, используйте эту ссылку, чтобы стать участником, потому что без каких-либо дополнительных затрат для вас я получаю небольшую комиссию за рекомендацию.