【问题标题】:Tornado asyncio questions龙卷风异步问题
【发布时间】:2016-11-07 16:40:36
【问题描述】:

目前我所有的函数都用@tornado.gen.coroutine 装饰,然后我就屈服了。我想搬到较新的async/await

移动到异步是否意味着我需要使用 asyncio IOLoop 启动 Tornado,如文档中所示:

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 实现这条线?

【问题讨论】:

    标签: tornado


    【解决方案1】:

    您确实不需要需要使用 asyncio 的事件循环,Tornado 可以使用 Tornado 事件循环运行原生协程(使用 async def 定义)。

    您可以等待协程列表,例如:

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

    More information about Tornado and native coroutines is in the docs.

    【讨论】:

    • 嗨,Jesse,但是为什么会有 asyncio 循环呢?如文档所述:tornadoweb.org/en/stable/asyncio.html?highlight=asyncio 看起来您可以显式启动 AsyncIOMainLoop。如果您可以直接使用 async 和 await 以及开箱即用的普通 IOLoop,为什么这是一个选项?
    • 这与“异步”和“等待”无关。它是关于使用为 asyncio 事件循环编写的依赖于其特定 API 的其他库,并将这些 asyncio 特定库与 Tornado 特定库或您的 Tornado 特定代码集成。
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多