Chi*_*and 2 python weak-references celery djcelery
我试图task2从task_success信号连接
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
如果删除app.tasktask2的装饰器,它可以完美地工作.但为什么它无法连接到芹菜任务?
技术细节是芹菜工人首先要对这项任务进行懒惰评估.也就是说,创建PromiseProxy的对象而不是celery.app.task:性能任务
默认情况下,signal.connect()将尝试使用对接收器对象的弱引用[这里,它是[ PromiseProxy ].这就是你得到这样的错误的原因.
解决方案很简单,只需将connect()的弱参数更改为False即可
task_success.connect(task2, sender=task1, weak=False)
但我发现它只适用于Windows.
以下一个应该没问题.在将多个装饰器与任务装饰器结合使用时,确保最后应用任务装饰器
@app.task
@signals.task_success.connect(sender=task1)
def task2():
    return 't2'