DJANGO_CELERY_BEAT从shared_task访问PeriodicTask

问题描述 投票:0回答:1

在我的项目中,我使用 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属性

我的问题是:

  1. 如何访问使任务运行的
    PeriodicTask
    实例?
  2. 如果我有 2 个
    PeriodicTask
    使用相同的共享任务但具有不同的计划/参数,它会找出哪一个是该特定运行的源吗?

预先感谢您的帮助。

django celery django-celery django-celery-beat
1个回答
2
投票

好吧,我找到了一种方法来做到这一点。

正如我在评论中所说,利用

@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
的信息。

© www.soinside.com 2019 - 2024. All rights reserved.