2016-11-07 84 views
0

目前我所有的功能都裝飾着@tornado.gen.coroutine,然後我屈服。我想搬到新的async/await龍捲風asyncio問題

要移動到異步這是否意味着我需要開始與ASYNCIO IOLoop龍捲風如圖文件:

from tornado.platform.asyncio import AsyncIOMainLoop 
import asyncio 
AsyncIOMainLoop().install() 
asyncio.get_event_loop().run_forever() 

我改變了一些協程使用async/await而不是yield這似乎工作在舊的Tornado IOLoop上,爲什麼如果我沒有使用asyncio明確啓動Tornado引擎?

在我目前的代碼,我有一個地方,我產生協同程序的列表:

responses=yield [wrap(httpClient,url) for url in somelist] 

這怎麼可能符合的await可以實現嗎?

回答

1

你做需要使用ASYNCIO的事件循環,龍捲風可以運行使用龍捲風事件循環本地協同程序(帶async def定義)。

您可以等待像協同程序的列表:

await tornado.gen.multi([wrap(httpClient,url) for url in somelist]) 

More information about Tornado and native coroutines is in the docs

+0

嗨,傑西,但爲什麼然後有asyncio循環?如記錄:http://www.tornadoweb.org/en/stable/asyncio.html?highlight=asyncio它看起來像你可以顯式啓動一個AsyncIOMainLoop。爲什麼這是一個選項,那麼如果你可以使用異步並等待正常的IOLoop開箱即用? –

+0

這不是關於「異步」和「等待」。這是關於使用爲asyncio事件循環編寫的其他庫,這些庫取決於其特定的API,並將這些特定於asyncio的庫與Tornado特定的庫或Tornado特定的代碼集成在一起。 –