【问题标题】:Can celery celerybeat dynamically add/remove tasks in runtime?celery celerybeat 可以在运行时动态添加/删除任务吗?
【发布时间】:2016-09-06 07:23:30
【问题描述】:

我有一个项目不包含 Django,所以我不能使用 djcelery。

但我发现django-celery DatabaseSchedule 中的modification 使用了sqlalchemy。

它像 djceley 的 DatabaseScheule 一样工作正常。 但是唯一的问题是它似乎没有发送运行时添加的任务,然后我重新启动celery-beat,之前添加的任务将发送成功。

那么,是否可以在不重启 celery-beat 的情况下动态添加/删除任务?

感谢您的任何建议。对不起,我的英语不好。

对不起,是我的错。在运行时添加的任务不会立即被拾取,您可以将DatabaseScheduler.sync_every 值更改为更快的值。所以它在等待几分钟后工作。

感谢图穆尔的帮助。

【问题讨论】:

    标签: python django celery django-celery


    【解决方案1】:

    解决方案 1:

    我也有同样的问题,问题是,Celery 定期调度器会寻找[djcelery_periodictasks],它的值是[last_update]。如果[last_update] 没有变化,那么 celery 将不会检查[djcelery_periodictask] 表。

    我们要做的是,当您添加/删除任务时,请更新 [djcelery_periodictasks] 中的 [last_update] 时间。

    在我的 senario 中,我在 python 中有周期性调度程序。但是我的 Web UI 是用 C# 编写的。我的 Web 应用程序将添加/删除 [djcelery_periodictask] 中的条目并更新 [djcelery_periodictasks] 中的 [last_update] 时间。

    通过这种方式,我已经解决了这个问题。

    当我们使用标准的flower UI 时,如果我们添加/删除任务,它将更新[last_update] 中的[last_update] 时间[djcelery_periodictasks]。如果您开发了自己的自定义 UI/应用程序,则必须在 [djcelery_periodictasks] 中包含更新 [last_update] 时间的功能,以动态添加/删除任务。

    解决方案 2:

    用花:https://github.com/mher/flower

    【讨论】:

    • 修改和djcelery有一些区别。将last_update字段更改为date_changed字段,添加任务时date_changed将设置为datetime.datetime.utcnow() , 所以last_update 的值已经设置好了。并感谢您的回答。