python - Celery - 安排在特定时间开始的周期性任务

标签 python celery scheduled-tasks

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

(考虑到我需要安排大约一百个远程 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/

相关文章:

python - 在 Python 中将网络摄像头视频表示为像素阵列流

python - 卡在 python 代码中进行加密。错误是类型 'x' 的对象的未知格式代码 'str'

python - 如何在 celery 任务中锁定变量?

java - Dropwizard ScheduledExecutorService

python - 如何使用 Pandas 数据框迭代和修改行值

python - 使用 ttk notebook 的两个选项卡,但两者的功能不同?

python - 用它自己的结果提供 celery 队列

python - 配置celery等待后端服务启动

Django - 带有 django-celery-beat/rabbitmq : Nothing? 的 Celery 4.1

windows-7 - Windows 7 是否支持 ITaskScheduler?