簡體   English   中英

無法通過芹菜信號連接到芹菜任務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM