首页 > 解决方案 > 重新加载 celery beat 配置

问题描述

我正在使用celerycelery-beat不使用 Django,并且我有一个任务需要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执行并正常存在,但 beatprocess_round任务从不运行。

如何强制重新加载节拍计划(重新启动所有工作人员似乎不是一个好主意)?

标签: pythoncelerycelerybeat

解决方案


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


,因此它不能动态更改您可以使用该软件包 celerybeat-sqlalchemy-scheduler,以便您可以在 DB 本身上编辑计划,以便 celerybeat 将从 DB 本身获取新计划

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

你也可以参考这个


推荐阅读