2014-03-12 49 views
1

當啓動一個這樣的管道時(這只是Pipelines API的演示代碼中的一個複製粘貼示例行),什麼是底層細節:什麼時候由Google App Engine Pipelines API創建任務

split_counts = yield SplitCount(entity_kind, property_name, *value_list)

將一個yield剛剛入隊一(1)任務,任務隊列,或管道處理這個內部使用不同數量的任務的每個管道上「自己的」根據工作正在做?

問題的背景:解決從無到有保持使用任務隊列的組合完全控制工作 ,異步網址提取,內存緩存,後端/模塊,從而控制有關的任務和相應的任務隊列中的所有細節使用;

,或者

僅僅依靠管道。

+0

我想知道同樣的事情,該文檔是對此非常有限。我的意思是,我有一些管道運行(異步),但我真的不明白他們在哪裏運行。你有沒有發現任何東西? – Okku

回答

-3

總之,您很可能需要Task Queues,memcache,異步url提取等等。產量和管道與任務隊列無關,它們管理一種不能執行任何上述操作的協程。

嘗試消除一些明顯的困惑:收益不會創建任務。管道不是任務隊列。 Yield expressions是不依賴於AppEngine的Python語言結構。相比之下,任務是AppEngine運行時用於啓動新的後臺進程(不提供瀏覽器請求)的數據結構(隊列)中的AppEngine記錄,該進程允許運行長達10分鐘。任何包括後臺任務的進程都可以選擇使用yield來管理該進程內的流量控制。我希望這有幫助。

+0

我知道你的答案中的內容,並且我正在詢問什麼時候由Pipelines API創建任務。上面的Python代碼片段只是這個問題的一個起點。這個問題的目的是很好地概述Pipelines API正在創建的任務的數量和時間。什麼決定了Pipelines API產生的任務? –

+0

您寫的Pipelines API在哪裏,以便我可以更好地理解您的意思? –

+0

https://code.google.com/p/appengine-pipeline/ –

1

當你產生一個管道實例時,管道API基本上將入隊一個'運行'任務。

然而,當你的管道返回時,可能會有一個額外的'輸出'任務被排隊以將結果轉發到任何下游管道,具體取決於它們(以及「運行」它們)......還有一個「扇出」這不知何故。

當整個管道鏈運行時,將會有另一個「最終確定」的任務排隊等待每個組成管道。

查看pipeline.py的底部,其中定義了請求處理程序。

當然,其中的任何一個都可以不止一次地入隊,就像GAE任務隊列上的任何任務一樣,並且如果在運行時由管道實例引發任何未捕獲的異常,那麼任務將被重試。

一些更詳細的(沒有具體關於任務,更多的我想了解所涉及的收益率則表達式)位置:
https://stackoverflow.com/a/25620665/202168