在我的项目中,我使用django celery beat包来执行计划任务。它工作得很好,但我有一个情况我不能处理。
所有的任务都有一个PeriodicTack
来调度它们。
那么下面的任务:
from celery import shared_task
@shared_task
def foo(**kwargs):
# Here I can to things like this :
whatever_method(kwargs["bar"])
我不知道这是不是运气,但事实证明,kwargs
"分"&;PeriodicTask
模型的kwargs属性
问题是:
- 如何访问使任务运行的
PeriodicTask
实例? - 如果我有2个
PeriodicTask
使用相同的shared_task,但具有不同的调度/参数,它会发现哪个是特定运行的源吗?
提前感谢您的帮助。
我找到了一个方法。
正如我在评论中所说,使用@app.task
解决了我的需求。
我结束了这样一个任务:
@app.task(bind=True)
def foo(self, **kwargs):
# The information I personally need is in self properties, like so :
desired_info = self.request.properties
# Do whatever is needed with desired info...
# Do whatever else ...
其中app
是在文档中描述的芹菜应用程序。
bind=True
,据我所知,是必要的,使任务有自己的请求,从而可以访问self
的信息。