【问题标题】:Celery : starting PeriodicTask after starting worker芹菜:启动工人后启动 PeriodicTask
【发布时间】:2014-04-02 10:24:19
【问题描述】:

我正在使用 Celery http://celery.readthedocs.org/en/latest/index.html

我需要在特定时刻运行周期性任务。但我只想在启动 celery worker 后开始我的任务。

为此,我正在尝试创建自己的“PeriodicTask”。但我正在处理一个问题。

当我在另一个终端启动工作器并执行 run_tasks.py 时,我的周期性任务似乎只执行一次。

如何让我的周期性任务每 3 秒运行一次。

这是代码的一部分。

开始芹菜:

celery worker --app=worker_manager.celery  --loglevel=info 

文件tasks.py

class MyPeriodicTask(PeriodicTask):

    name = "periodic-task"
    run_every = timedelta(seconds=3)

    def run(self, **kwargs):

        logger = self.get_logger(**kwargs)
        logger.info("Running periodic task!")

文件run_tasks.py

tasks.register(MyPeriodicTask)

wmi_collector_task = worker_app.tasks[MyPeriodicTask.name]

提前致谢。

【问题讨论】:

    标签: python scheduled-tasks celery worker periodic-task


    【解决方案1】:

    要运行周期性任务,您需要启动 celery beat。您可以通过在启动工人时传递 -B 参数来做到这一点:

    celery worker -B --app=worker_manager.celery --loglevel=info 
    

    【讨论】:

    • 谢谢。当我添加选项 -B 时,我会在启动工作人员时执行我的定期任务。我该怎么做才能在 run_tasks.py 中运行任务