Сельдерей - график периодических задач, начиная с определенного времени - PullRequest
6 голосов
/ 21 октября 2011

Каков наилучший способ запланировать периодическое задание, начинающееся на определенную дату?

(я не использую cron для этого, учитывая, что мне нужно запланировать около ста удаленных rsyncs, где я вычисляюудаленное по сравнению с локальным смещением и потребуется rsync для каждого пути секунда журналы создаются на каждом хосте.)

Насколько я понимаю, класс crontab celery.task.schedules позволяет указывать только часМинута, день недели.Самый полезный совет, который я нашел до сих пор, был этот ответ от nosklo .

Это лучшее решение?Я использую не тот инструмент для работы?

Ответы [ 2 ]

12 голосов
/ 26 октября 2011

Celery кажется хорошим решением для вашей проблемы с расписанием: у Периодических Задач Celery есть разрешение по времени выполнения в секундах.

Вы используете соответствующий инструмент здесь, но запись в crontab - не то, что вам нужно.Вы хотите использовать объект datetime.timedelta в python;Планировщик crontab в celery.schedules имеет только минутное разрешение, но использование timedelta для настройки интервала PeriodicTask обеспечивает строго больше функциональности, в данном случае, в секунду.

Например, из документов Celery

>>> from celery.task import tasks, PeriodicTask
>>> from datetime import timedelta
>>> class EveryThirtySecondsTask(PeriodicTask):
...     run_every = timedelta(seconds=30)
...
...     def run(self, **kwargs):
...         logger = self.get_logger(**kwargs)
...         logger.info("Execute every 30 seconds")

http://ask.github.com/celery/reference/celery.task.base.html#celery.task.base.PeriodicTask

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

Единственная проблема здесь заключается в том, что вам нужно описать частоту, с которой вы хотите, чтобы эта задача выполнялась, а не в какое время вы хотите, чтобы она выполнялась;однако я бы посоветовал вам проверить Advanced Python Scheduler http://packages.python.org/APScheduler/

Похоже, Advanced Python Scheduler можно легко использовать для запуска обычных (то есть не периодических) задач Celery в любое расписание по вашему выбору, используя его собственныйфункциональность планирования.

0 голосов
/ 21 октября 2011

Недавно я работал над задачей, в которой участвовал Celery, и мне пришлось использовать ее как для асинхронной работы, так и для запланированных задач. Достаточно сказать, что я вернулся к старому crontab для запланированной задачи, хотя он вызывает скрипт python, который порождает отдельную асинхронную задачу. Таким образом, у меня меньше возможностей для поддержки crontab (для запуска планировщика Celery требуется дополнительная настройка), но я полностью использую асинхронные возможности Celery.

...