python - 向可以从自定义基类访问的 celery 函数添加额外的属性
问题描述
使用@task
装饰器定义 celery 任务函数时,是否可以向装饰器添加一些额外的属性,当任务启动时我可以从任务基类访问这些属性,而无需向任务函数本身添加新参数?
就像是
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))