2016-12-29 6 views
1

У меня есть служба, которую я пишу на Python, которая позволяет пользователям планировать выполнение задачи с разными интервалами. Примеры задач будет:Лучший инструмент для планирования задач с интервалами?

  • Задача A: сделать проверку состояния на каждые 10 секунд
  • Задача B: сделать проверку состояния на каждые 3 секунды
  • Задача С: сделать проверку состояния для каждого 15 секунды

Задачи должны выполняться независимо друг от друга. Я также хочу убедиться, что Task A не может работать снова, пока не будет выполнена предыдущая попытка. Помните, что количество задач является динамическим, и поэтому в интервале, в котором они запускаются.

Я посмотрел на RabbitMQ, но мне трудно решить, способен ли он на такое.

ответ

1

Я недавно использовал сельдерей, чтобы сделать то, что вы пытаетесь достичь. С сельдереем вы можете создавать задачи, которые по сути являются функциями, которые вы распределяете в очередь задач. Вы также можете выполнять задачи сельдерея периодически, независимо от того, означает ли это каждые x секунд или более подход к crontab.

Ищите периодические задания в документации на сельдерей, чтобы узнать, подходит ли оно тому, что вы пытаетесь сделать. Сельдерей использует кроликм или redis (прежде всего). Каждая задача выполняется в своем отдельном потоке из основной программы.

1

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

Рассмотрите Amazon Simple Queue Service (SQS) или Amazon Simple Workflow Service вместо того, чтобы поддерживать свои собственные RabbitMQ/Celery экземпляры.

Просмотреть информацию о using Python boto3 library with SQS.