簡體   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