[英]Unable to connect to celery task from a celery signal?
我正在嘗試從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
裝飾器,則效果很好。 但是為什么它無法連接到芹菜任務?
技術細節是,該任務將首先由芹菜工作者評估。 也就是說,要創建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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.