2016-11-11 49 views
0

我開始尋找龍捲風並開始閱讀user guide。不過我發現關於協程的東西很迷惑。一方面文檔講述了裝飾@gen.coroutine如何讓事情變得更容易,但在另一方面,它會告訴你,那:龍捲風協同作業的原生協程Python 3.5的優勢

的Python 3.5引入了異步伺機關鍵字(使用這些關鍵字功能也被稱爲「原生協同程序」)。從Tornado 4.3開始,您可以使用它們來代替基於收益率的協同程序。只需使用async def foo()代替使用@ gen.coroutine修飾器的函數定義,並等待代替yield。本文檔的其餘部分仍使用與舊版本的Python的兼容性產量的風格,但異步和等待的運行速度更快可用時:[...]

所以,現在我想:「OK那麼,只需使用asyncawait就可以了。「但是,在所有示例中,文檔始終使用裝飾器,而不是關鍵字async

有一節關於如何調用協程。文檔中寫入的內容對於本機關鍵字仍然如此?

這些裝飾器給了我什麼,所以我應該使用它們而不是本地Python 3.5語法?

(我使用Python 3.5我的這個學習項目,所以我不關心向後兼容性。)

+0

Python將處於過渡狀態一段時間;協程將最終替代舊的基於生成器的異步代碼,因爲3.5已成爲標準。 –

+0

相關:[PEP 0492 - Python 3.5異步關鍵字](// stackoverflow.com/q/31291129) –

回答

1

文檔一樣說,如果你在Python 3.5使用異步和等待,不「gen.coroutine」裝飾器和「yield」。在Python 3.5中,使用裝飾器和「yield」沒有任何優勢。

爲了與舊版本的Python兼容,本教程使用舊版本。

要在Python 3.5中調用協程,請使用「await」而不是「yield」。指南中該部分的其他內容仍然正確。

+0

所以如果我只是學習'async'和'await'(在其他一些教程中),然後重寫所有示例在使用'await'和'async'的龍捲風指南中,我會好嗎?我可以跳過整個「以這種方式調用異步函數,這樣稱呼它們」的東西?還是有什麼本地關鍵字不能做的,我需要使用龍捲風的東西,並需要了解? – Zelphir

+0

對,如果你在Python 3.5中,使用裝飾器和「yield」沒有任何優勢。但是請閱讀底部的「協同模式」部分,再簡單地替換異步並等待裝飾器和產量:http://www.tornadoweb.org/en/stable/guide/coroutines.html#coroutine-patterns –