重新加载芹菜节拍配置

Reload celery beat config

我正在使用没有 Django 的 celerycelery-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 执行并正常存在,但击败 process_round 任务永远不会 运行s。

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

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

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


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

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

你也可以参考这个this