如何动态改变芹菜节拍的时间表?

Mat*_*let 6 python scheduled-tasks job-scheduling celery celerybeat

我正在使用芹菜 4.3.0。我正在尝试根据 json 文件中的时间表每 5 秒更新一次 celery beat 的时间表,以便当我手动编辑、添加或删除该 json 文件中的计划任务时,celery beat 会获取更改调度程序而无需重新启动它。

我尝试的是创建一个任务,通过更新app.conf['CELERYBEAT_SCHEDULE']. 该任务每 5 秒成功运行一次,但 celery beat 不会更新到新的计划,即使我设置beat_max_loop_interval为 1 秒。

任务.py

from celery import Celery

app = Celery("tasks", backend='redis://', broker='redis://')
app.config_from_object('celeryconfig')

@app.task
def hello_world():
    return "Hello World!"

@app.task
def update_schedule():
    with open("path_to_scheduler.json", "r") as f:
        app.conf['CELERYBEAT_SCHEDULE'] = json.load(f)
Run Code Online (Sandbox Code Playgroud)

芹菜配置文件

beat_max_loop_interval = 1  # Maximum number of seconds beat can sleep between checking the schedule

beat_schedule = {
    "greet-every-10-seconds": {
        "task": "tasks.hello_world",
        "schedule": 10.0
    },
    'update_schedule': {
        'task': 'tasks.update_schedule',
        'schedule': 5.0
    },
}
Run Code Online (Sandbox Code Playgroud)

时间表.json

{
  "greet-every-2-seconds": {
        "task": "tasks.hello_world",
        "schedule": 2.0
    },
  "update_schedule": {
    "task": "tasks.update_schedule",
    "schedule": 5.0
  }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。如果您知道从文件重新加载节拍时间表的更好方法,我也很想听听。