在我的项目中,我使用 django celerybeat 包来执行计划任务。它运作良好,但我有一个无法处理的情况。
所有任务都有一个
PeriodicTack
来安排它们。
所以下面的任务:
from celery import shared_task
@shared_task
def foo(**kwargs):
# Here I can do things like this :
whatever_method(kwargs["bar"])
不知道是不是运气好,但事实证明,
kwargs
“指向”了PeriodicTask
模型的kwargs属性。
我的问题是:
PeriodicTask
实例?PeriodicTask
使用相同的共享任务但具有不同的计划/参数,它会找出哪一个是该特定运行的源吗?预先感谢您的帮助。
好吧,我找到了一种方法来做到这一点。
正如我在评论中所说,利用
@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
是 Celery 应用程序,如 docs 中所述。
据我了解,
bind=True
对于使任务有自己的请求是必要的,从而可以访问self
的信息。