向可从自定义基础访问的 celery 函数添加额外属性 class

Adding extra attributes to celery function that can be accessed from custom base class

当使用 @task 装饰器定义 celery 任务函数时,是否可以向装饰器添加一些额外的属性,当任务开始时我可以从我的任务库 class 访问这些属性而不添加任务函数本身的新参数?

类似

class CustomBase(celery.Task):
     def __call__(self, *args, **kwargs):
         # do something with foo
         ...

         self.run()

@task(base=CustomBase, bind=True, foo=123)
def add(self, x, y):
    return x + y

如果您将一些变量传递给任务装饰器(使用 bind=True),它会将它们传递给任务的构造函数。您可以使用 self 访问它们。只是一个代码示例

from celery import Celery, chord, chain, Task

backend = 'redis://redis:6379/'
app = Celery(result_backend=backend, backend=backend)


class CustomBase(Task):
    def __call__(self, *args, **kwargs):
        print(self.foo)  # in class
        return super().__call__(*args, **kwargs)


@app.task(base=CustomBase, bind=True, foo=123)
def add(self, x, y):
    print(self.foo)  # in task
    return x + y


add.apply_async((1, 2))