繁体   English   中英

芹菜 - 安排在特定时间开始的定期任务

[英]Celery - schedule periodic tasks starting at a specific time

从特定日期时间开始安排定期任务的最佳方法是什么?

(我没有使用cron考虑到我需要安排大约一百个远程rsyncs,我计算远程vs本地偏移量,并且需要rsync每个路径,在每个主机中生成日志的第二个路径。)

根据我的理解,celery.task.schedules crontab类只允许指定小时,分钟,星期几。 到目前为止我发现的最有用的提示是nosklo的答案

这是最好的解决方案吗? 我使用错误的工具来完成工作吗?

对于您的调度问题,Celery似乎是一个很好的解决方案:Celery的PeriodicTasks具有几秒钟的运行时间分辨率。

你在这里使用了一个合适的工具,但crontab条目并不是你想要的。 你想使用python的datetime.timedelta对象; celery.schedules中的crontab调度程序只有很小的分辨率,但使用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)

这里唯一的挑战是你必须描述你想要运行这个任务的频率,而不是你想要它运行的时钟; 但是,我建议你查看高级Python调度程序http://packages.python.org/APScheduler/

看起来Advanced Python Scheduler可以很容易地用于在您选择的任何计划中使用它自己的调度功能启动正常(即非周期性)Celery任务。

我最近参与了一项涉及Celery的任务,我不得不将它用于异步操作以及计划任务。 我只想说我使用旧的crontab来执行计划任务,尽管它调用了一个生成单独异步任务的python脚本。 这样我对crontab的维护就更少了(为了让Celery调度程序在那里运行需要进一步设置),但我正在充分利用Celery的异步功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM