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

时间:2019-07-17 06:48:23

标签: python celery scheduled-tasks job-scheduling celerybeat

我正在使用Celery 4.3.0。我正在尝试根据json文件中的计划每5秒更新一次celery beat的计划,以便在我手动编辑,添加或删除json文件中的计划任务时,这些变化会被celery beat接收。调度程序而不重新启动它。

我尝试创建的任务是通过更新app.conf['CELERYBEAT_SCHEDULE']来更新此计划。该任务每5秒成功运行一次,但是即使我将beat_max_loop_interval设置为1秒,芹菜节拍也不会更新为新时间表。

tasks.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)

celeryconfig.py

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
    },
}

schedule.json

{
  "greet-every-2-seconds": {
        "task": "tasks.hello_world",
        "schedule": 2.0
    },
  "update_schedule": {
    "task": "tasks.update_schedule",
    "schedule": 5.0
  }
}

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

0 个答案:

没有答案