python - 向可从自定义基类访问的 celery 函数添加额外属性

标签 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))

关于python - 向可从自定义基类访问的 celery 函数添加额外属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994359/

相关文章:

django - 在 Django Celery 中使用 .env 中的环境变量

docker - 在不同的 Docker 容器中运行 Celery 工作人员的 Airflow 设置?

python - 为什么多处理中的扩展进程比所有其他进程都慢&

python - 从包含 dict 的 pandas 列中提取有用的信息

python - 检查是否可以使用提供的列表中的单词将字符串拆分为句子

python - python lxml 中的 XQuery 绝对路径

docker - 由于DataBaseSceduler而导致CeleryBeat中的属性错误

flask - celery + Redis + Flask如何获得待通过 celery 执行的工作量

python - Celery 3.1 - 异步执行任务链

python - 如何减少Python3请求中连接超时的等待?