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

2024-05-29 10:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

从特定日期开始安排周期性任务的最佳方式是什么?

(考虑到我需要调度大约100个远程rsync,所以我不使用cron, 在这里,我计算远程与本地的偏移量,需要rsync每条路径,然后在每个主机中生成日志

据我所知,celeri.task.schedules crontab类只允许指定小时、分钟和星期几。 到目前为止,我找到的最有用的提示是this answer by nosklo

这是最好的解决办法吗? 我用错工具了吗?


Tags: answer路径task远程方式this调度cron
2条回答

芹菜似乎是解决调度问题的好方法:芹菜的PeriodicTasks以秒为单位具有运行时分辨率。

您在这里使用的是适当的工具,但是crontab条目不是您想要的。您希望使用python的datetime.timedelta对象;celeri.schedules中的crontab调度程序只有分钟分辨率,但是使用timedelta配置PeriodicTask interval可以提供更严格的功能,在本例中是每秒分辨率。

例如从芹菜医生那里

>>> 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/

看起来,高级Python调度程序可以很容易地使用它自己的调度功能,在您选择的任何调度下启动正常(即非周期性)的芹菜任务。

我最近做了一个涉及芹菜的任务,我不得不将它用于异步操作和计划任务。可以说,我在调度的任务中求助于旧的crontab,尽管它调用一个python脚本,生成一个单独的异步任务。这样,我就不用为crontab维护太多了(要使芹菜调度程序在那里运行,需要进一步设置),但是我充分利用了芹菜的异步功能。

相关问题 更多 >

    热门问题