我的应用程序根据用户定义的计划创建PeriodicTask
个对象。也就是说,PeriodicTask的计划可以随时更改。在过去的几天里,我们花了很多时间试图找出如何让Celery支持这一点。最终,问题是,对于首先作为PeriodicTask
运行的东西,必须先创建,然后必须进行注册(我不知道为什么需要这样做)。
因此,要使动态任务起作用,我需要
#1应该通过运行启动脚本(即在调用./manage.py celerybeat之后运行的东西)轻松解决。不幸的是,我不认为这是一个方便的地方。如果有的话,脚本将会是这样的:
from djcelery.models import PeriodicTask
from celery.registry import tasks
for task in PeriodicTask.objects.filter(name__startswith = 'scheduler.'):
tasks.register(task)
我正在过滤'调度程序'。因为我所有动态任务的名称都是这样开始的。
#2我不知道。到目前为止,问题是celery.registry.tasks
保留在内存中,除非有一些编码魔法,否则一旦开始运行就无法访问celerybeat的任务注册表。
提前感谢您的帮助。