在创建芹菜PeriodicTask并在运行时注册它

时间:2013-06-11 17:02:44

标签: python django celery

我的应用程序根据用户定义的计划创建PeriodicTask个对象。也就是说,PeriodicTask的计划可以随时更改。在过去的几天里,我们花了很多时间试图找出如何让Celery支持这一点。最终,问题是,对于首先作为PeriodicTask运行的东西,必须先创建,然后必须进行注册(我不知道为什么需要这样做)。

因此,要使动态任务起作用,我需要

  1. 在celery服务器启动时注册所有任务
  2. 在新创建时注册任务。
  3. #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的任务注册表。

    提前感谢您的帮助。

0 个答案:

没有答案