Celery任务监控内部定期任务

时间:2015-02-11 10:06:09

标签: task celery monitoring django-celery periodic-task

我在django项目中使用celery,我有一个芹菜计划任务,每分钟运行一次,如果有新任务要启动,则检查数据库内部,并且配置的任务还有一个时间开始和持续时间

这项定期任务的工作是:

  • 如果配置了newone,则启动新的异步任务。 (task.delay(...))
  • 检查先前启动的任务是否正在运行
  • 停止超过其持续时间的任务(app.control.revoke(...))
  • ....和其他东西......

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

我的意思是每次运行这个任务时,我都会从DB获取所有已配置的任务(启动,开始....)但我没有相关的芹菜任务ID,我应该存储芹菜db中的任务id,是否有与相关任务芹菜相关联的db任务?

django-celery可以帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

Celery将使用结果后端自动跟踪状态。如果你想使用Django ORM存储这个状态,那么是的django-celery可以帮助你:

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

Celery有一些功能可以帮助您停止超出持续时间的任务。

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

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