gpt4 book ai didi

python - 无法从 celery 信号连接到 celery 任务?

转载 作者:行者123 更新时间:2023-11-28 21:53:27 29 4
gpt4 key购买 nike

我正在尝试从 task_success 信号连接 task2

from celery.signals import task_success
from celery import Celery

app = Celery()

@app.task
def task1():
return 't1'

@app.task
def task2():
return 't2'

task_success.connect(task2, sender=task1)

当我运行这段代码时,它会抛出

TypeError: cannot create weak reference to 'PromiseProxy' object

如果删除 task2 的 app.task 装饰器,它会完美地工作。但是为什么连接不上celery任务呢?

最佳答案

技术细节是任务将首先由 celery worker 进行惰性评估。也就是说,创建一个 PromiseProxy 的对象而不是 celery.app.task:Task 来提高性能

默认情况下,signal.connect() 将尝试使用对接收者对象的弱引用 [这里是 [PromiseProxy]。这就是您出现此类错误的原因。

解决方法很简单,把connect()weak参数改成False就可以了

task_success.connect(task2, sender=task1, weak=False)

但我发现它只适用于windows。

下面这个应该没问题。当结合任务装饰器使用多个装饰器时,确保最后应用任务装饰器

@app.task
@signals.task_success.connect(sender=task1)
def task2():
return 't2'

关于python - 无法从 celery 信号连接到 celery 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284374/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com