簡體   English   中英

為什么我們需要Celery中的簽名?

[英]Why do we need Signatures in Celery?

我已經開始在我的Django Python項目中使用Celery 4.1並遇到了Signatures。

文檔中它說明如下:

您剛學會了如何使用調用指南中的tasks delay方法調用任務,這通常是您所需要的,但有時您可能希望將任務調用的簽名傳遞給另一個進程或作為另一個函數的參數。

signature()以一種方式包裝單個任務調用的參數,關鍵字參數和執行選項,以便它可以傳遞給函數,甚至可以通過線路進行序列化和發送。

雖然我在一些例子中看到了它們,但我並不知道何時以及為何使用它們,以及它們解決了哪些問題。 有人可以向外行人解釋這個嗎?

簽名與鏈一起使用以創建工作流程。 “.s”是“.signature”的縮寫。 當使用“.s”時,表示前端任務的結果或返回值將傳遞給下一個任務。 “簽名”的反面是“不可變簽名”,其中每個任務都是獨立的。 例如(簽名):

res = chain(add.s(2,2), add.s(4), add.s(8))
res().get()
>> 16

示例(不可變簽名):

res = chain(add.si(2,2)|add.si(4,4)|add.si(8,8))()
res.get()
>>16
res.parent.get()
>>8
res.parent.parent.get()
>>4

您可以將Celery中的簽名視為運行任務的占位符。 例如,假設您希望構建一個由和弦,組和鏈組成的復雜工作流,並將其用於不同的代碼段。 在這種情況下,可以更容易地定義各種任務簽名,並將其作為必要條件放置在工作流程中:

def create_workflow():
    return chord([sig_1, sig_2, chain([sig_3, sig_4])], 
        body=group([sig_5, sig_6]).set(queue=PRIORITY_QUEUE))

此示例中的每個簽名都已預先定義,如果這些簽名很復雜,可能會產生很大的不同。 然后你可以調用create_workflow()並在需要時對它應用delay()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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