我使用的是For Each kvp In dict
Dim Key = kvp.Key
Dim Value = kvp.Value
Next
和celery
,而没有Django,我有一个任务需要在运行时修改celery-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
任务永远不会运行。
我该如何强制重新加载节拍时间表(重启所有工作人员似乎不是一个好主意)?
答案 0 :(得分:1)
启动celerybeat进程时,正常的celery后端存在问题。它会创建一个配置文件并将所有任务和计划写入该文件吗
所以它不能动态更改
你可以使用包裹
celerybeat-sqlalchemy-scheduler
,因此您可以在数据库本身上编辑时间表,以便celerybeat将从数据库本身获取新时间表
还有另一个软件包celery-redbeat
,它使用redis-server作为后端
您也可以参考此this
答案 1 :(得分:0)
使用时间表配置似乎也不是个好主意。如果最初的process_round任务将处于活动状态,并检查游戏是否未启动,该怎么办?