当使用 @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))
关于python - 向可从自定义基类访问的 celery 函数添加额外属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994359/