2015-02-11 67 views
1

我在django项目中使用了芹菜,我有一个每分钟运行一次的芹菜计划任务,并在数据库中检查是否有新任务启动,并且配置的任务还有一个时间开始和持续时间。定期执行Celery任务监视任务

这个周期任务的任务是:如果有配置newone

  • 启动一个新的异步任务。 (task.delay(...))
  • 检查以前的一个任务开始运行超过其持续时间(app.control.revoke(...))
  • 停止任务
  • ....和其他的东西...

但问题是:什么是“最佳实践”来监视周期性任务内启动的异步任务的状态?

我的意思是每次调度任务运行,我从数据库获取所有配置的任务(开始,开始....),但我没有相关的芹菜任务ID,我应该存储芹菜任务ID内的数据库,以使数据库任务关联到相关的任务芹菜运行?

django芹菜可以帮我吗?

谢谢。

回答

1

芹菜会使用结果后端自动跟踪状态。如果你想存储使用Django ORM这种状态下,然后是Django的芹菜可与帮助:

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#using-the-django-orm-cache-as-a-result-backend

http://docs.celeryproject.org/en/latest/userguide/tasks.html#result-backends

http://docs.celeryproject.org/en/latest/configuration.html#task-result-backend-settings

一两件事,也可以帮助芹菜有几个用于停止超过其持续时间的任务的功能。

您可以使用配置设置全局限制:

http://docs.celeryproject.org/en/latest/configuration.html#celeryd-task-time-limit

可以使用装饰参数每个任务类型设置过期时间:

http://docs.celeryproject.org/en/latest/userguide/tasks.html#list-of-options

您可以设置过期时间按预定例如:

http://docs.celeryproject.org/en/latest/userguide/calling.html#expiration

+0

感谢您的回答,但我可以管理这些任务存储在python脚本中的结果后端内,如果可以的话,我可以在哪里找到示例?再次感谢! – 2015-02-12 08:03:31

+0

“管理”任务是什么意思?通常,结果后端用于将任务的状态存储在数据库中,以便您可以轻松查询状态,获取结果,检查错误并构建诸如状态仪表板或历史指标之类的内容。 – 2015-02-13 02:08:59