2016-11-07 73 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特定的代码集成在一起。 –