【发布时间】:2017-02-21 09:03:09
【问题描述】:
我正在尝试找到一种方法来获取触发 celery beat 以触发任务的时间条件。
获取datetime.now() 由于所有 celery 工作人员都在忙碌,因此通常会偏离任务按 celery beat 排队的时间。
例如:我将任务设置为每天 12:30 执行,但由于任务在 12:31 开始运行时所有工作人员都很忙。
无论任务执行的时间如何,我都需要知道哪个时间条件触发了任务。
编辑:
这就是我定义周期性任务的方式:
CELERYBEAT_SCHEDULE = {
'periodic_clear_task': {
'task': 'app.tasks.periodic_clear_task',
'schedule': crontab(hour=2),
'args': ()
},
'periodic_update_task': {
'task': 'app.tasks.periodic_update_task',
'schedule': crontab(minute='00,30'),
'args': ()
},
}
【问题讨论】:
-
您可以在调用任务时将 datetime.now() 作为参数传递吗?
-
@JensAstrup 我该怎么做?编辑:我刚刚编辑了问题以包括我的定期任务的定义
-
刚刚记住,一旦 celery worker 启动,调度程序就会被处理——而不是每次运行任务时。换句话说,将 datetime 作为参数传递只会给你启动 worker 的时间,这没有帮助。您正在寻找的内容可能在bound methods
-
嗨莱昂内尔,你能得到这个答案吗?我也想这样做。
-
@MohammadMustaqeem 不幸的是没有。我最终将那些需要在他们自己的队列中更短的触发时间的任务排队,这样他们就不必等到其他任务完成并解决我的问题。这可能无法解决您的方案中的问题。它对我有用,因为这些任务并不多,可以移动到另一个队列,而不必担心顺序执行会丢失。如果您有任何其他问题,请随时提问。
标签: python django celery django-celery celerybeat