python - 重新加载 celery beat 配置
问题描述
我正在使用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
任务从不运行。
如何强制重新加载节拍计划(重新启动所有工作人员似乎不是一个好主意)?
解决方案
启动 celerybeat 进程时,正常 celery 后端的问题。它将创建一个配置文件并将所有任务和计划写入该文件
,因此它不能动态更改您可以使用该软件包
celerybeat-sqlalchemy-scheduler
,以便您可以在 DB 本身上编辑计划,以便 celerybeat 将从 DB 本身获取新计划
还有另一个celery-redbeat
使用 redis-server 作为后端的包
你也可以参考这个
推荐阅读
- amazon-web-services - ssh 到 EC2 上托管的 docker 容器
- logging - kubernetes:kubectl 没有检索到日志
- vue.js - 在vuejs中,单击元素时如何传递html元素?
- java - 创建一个如果 UNICODE_CASE 关闭则失败但打开时匹配的示例
- ethereum - 以太坊 web3js 方法调用失败
- php - MySQL 无法通过远程 php 脚本访问连接
- java - 杰克逊检查可选字段
- javascript - 如何打开/关闭?(Javascript)
- reactjs - 如何使用 Field redux-form 发送道具
- c# - 具有运行模式和编辑模式