用动态源(数据库)替换 Celery Beat "CELERYBEAT_SCHEDULE"

Replacing Celery Beat "CELERYBEAT_SCHEDULE" with a dynamic source (database)

Celery docs 中,设置任务计划的标准方法被记录为将计划硬编码到配置文件中。

但是,它也暗示这可以用自定义后端代替。我看到 Django 有一个动态的、数据库驱动的选项,但我正在使用一个简单的 Flask 应用程序来定义我的任务。

有没有人有办法动态加载时间表,避免重新启动 celery beat worker 的需要,方法是从数据库动态提取时间表或定期从文本文件重新加载时间表?是不是像在文本文件中围绕调度调用 reload() 一样简单,甚至可能是它自己的调度 celery 任务?

CELERYBEAT_SCHEDULE 只是 init/config 糖,对象可从绑定任务中获得:

self.app.conf['CELERYBEAT_SCHEDULE']

您可以编写一个周期性任务,从某些后端提取新值。