2024-05-29 10:32:32 发布
网友
从特定日期开始安排周期性任务的最佳方式是什么?
(考虑到我需要调度大约100个远程rsync,所以我不使用cron, 在这里,我计算远程与本地的偏移量,需要rsync每条路径,然后在每个主机中生成日志
据我所知,celeri.task.schedules crontab类只允许指定小时、分钟和星期几。 到目前为止,我找到的最有用的提示是this answer by nosklo。
这是最好的解决办法吗? 我用错工具了吗?
芹菜似乎是解决调度问题的好方法:芹菜的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维护太多了(要使芹菜调度程序在那里运行,需要进一步设置),但是我充分利用了芹菜的异步功能。
芹菜似乎是解决调度问题的好方法:芹菜的PeriodicTasks以秒为单位具有运行时分辨率。
您在这里使用的是适当的工具,但是crontab条目不是您想要的。您希望使用python的datetime.timedelta对象;celeri.schedules中的crontab调度程序只有分钟分辨率,但是使用timedelta配置PeriodicTask interval可以提供更严格的功能,在本例中是每秒分辨率。
例如从芹菜医生那里
http://ask.github.com/celery/reference/celery.task.base.html#celery.task.base.PeriodicTask
这里唯一的挑战是,您必须描述此任务运行的频率,而不是您希望它运行的时钟时间;但是,我建议您查看高级Python调度程序http://packages.python.org/APScheduler/
看起来,高级Python调度程序可以很容易地使用它自己的调度功能,在您选择的任何调度下启动正常(即非周期性)的芹菜任务。
我最近做了一个涉及芹菜的任务,我不得不将它用于异步操作和计划任务。可以说,我在调度的任务中求助于旧的crontab,尽管它调用一个python脚本,生成一个单独的异步任务。这样,我就不用为crontab维护太多了(要使芹菜调度程序在那里运行,需要进一步设置),但是我充分利用了芹菜的异步功能。
相关问题 更多 >
编程相关推荐