重新加载芹菜节拍配置

时间:2019-03-29 08:03:21

标签: python celery celerybeat

我使用的是For Each kvp In dict Dim Key = kvp.Key Dim Value = kvp.Value Next celery,而没有Django,我有一个任务需要在运行时修改celery-beat的时间表。

现在我有以下代码(名为celery-beat的模块):

celery_tasks

# __init__.py

from .celery import app as celery_app

__all__ = ['celery_app']

#celery.py

from celery import Celery

import config

celery_config = config.get_celery_config()

app = Celery(
    __name__,
    include=[
        'celery_tasks.tasks',
    ],
)

app.conf.update(celery_config)

我使用以下命令启动# tasks.py from celery_tasks import celery_app from celery import shared_task @shared_task def start_game(): celery_app.conf.beat_schedule = { 'process_round': { 'task': 'celery_tasks.tasks.process_round', 'schedule': 5, }, }

celery

celery worker -A celery_tasks -E -l info --beat 执行并正常存在,但节拍start_game任务永远不会运行。

我该如何强制重新加载节拍时间表(重启所有工作人员似乎不是一个好主意)?

2 个答案:

答案 0 :(得分:1)

启动celerybeat进程时,正常的celery后端存在问题。它会创建一个配置文件并将所有任务和计划写入该文件吗


所以它不能动态更改 你可以使用包裹 celerybeat-sqlalchemy-scheduler,因此您可以在数据库本身上编辑时间表,以便celerybeat将从数据库本身获取新时间表

还有另一个软件包celery-redbeat,它使用redis-server作为后端

您也可以参考此this

答案 1 :(得分:0)

使用时间表配置似乎也不是个好主意。如果最初的process_round任务将处于活动状态,并检查游戏是否未启动,该怎么办?