使用@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
Run Code Online (Sandbox Code Playgroud)
如果将一些变量传递给任务装饰器(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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |