安排从特定日期时间开始的定期任务的最佳方法是什么?
(考虑到我需要安排大约一百个远程 rsync,我没有为此使用 cron, 我在这里计算远程与本地偏移量,并且需要在每个主机中生成日志的第二个 rsync 每个路径。)
根据我的理解,celery.task.schedules crontab 类只允许指定小时、分钟、星期几。 到目前为止我发现的最有用的提示是 this answer by 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)
这里唯一的挑战是您必须描述您希望此任务运行的频率,而不是您希望它运行的时钟时间;但是,我建议您查看 Advanced Python Scheduler http://packages.python.org/APScheduler/
看起来 Advanced Python Scheduler 可以很容易地用于启动正常的(即非定期的)Celery 任务,使用它自己的调度功能,您可以选择任何时间表。
关于python - Celery - 安排在特定时间开始的周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848512/