Celery кажется хорошим решением для вашей проблемы с планированием: периодические задачи Celery имеют разрешение времени выполнения в секундах.
Здесь вы используете подходящий инструмент, но запись в crontab — это не то, что вам нужно. Вы хотите использовать объект python datetime.timedelta; Планировщик crontab в celery.schedules имеет только минутное разрешение, но использование timedelta для настройки интервала PeriodicTask обеспечивает более функциональные возможности, в данном случае разрешение в секунду.
например из документов сельдерея
>>> 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 по любому расписанию по вашему выбору, используя его собственные функции планирования.
person
bakennedy
schedule
26.10.2011