重新加载芹菜击败配置

问题描述 投票:-1回答:2

我正在使用没有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任务永远不会运行。

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

python celery celerybeat
2个回答
1
投票

当你开始celerybeat过程时,正常芹菜后端的问题。是否会创建配置文件并将所有任务和日程安排写入该文件 所以它不能动态改变你可以使用包celerybeat-sqlalchemy-scheduler所以你可以编辑数据库本身的时间表,以便celerybeat将从数据库本身获取新的时间表

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

你也可以参考这个this


0
投票

使用schedule config似乎也不错。如果最初的process_round任务将处于活动状态并检查游戏是否未启动,那么该怎么办呢。

© www.soinside.com 2019 - 2024. All rights reserved.