重新加载芹菜节拍配置

我正在使用celery和celery-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任务从不运行。


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


胡说叔叔
浏览 106回答 2
2回答

胡子哥哥

启动 celerybeat 进程时普通 celery 后端的问题。是否会创建一个配置文件并将所有任务和计划写入该文件,以便它不能动态更改您可以使用该包, celerybeat-sqlalchemy-scheduler以便您可以编辑 DB 本身的计划,以便 celerybeat 将从 DB 本身获取新计划还有另一个celery-redbeat使用 redis-server 作为后端的包你可以参考这本也

守着一只汪

使用 schedule config 似乎也是个坏主意。如果最初 process_round 任务将处于活动状态并检查游戏是否未开始,那么什么都不做。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python