如何从tornado事件循环调用prompt\u工具箱?

2024-04-26 18:15:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从使用tornado事件循环的应用程序中使用prompt\u toolkit,但我无法找到将prompt\u toolkit prompt添加到事件循环的正确方法。你知道吗

prompt\u toolkit文档有一个在asyncio(Asyncio Docs)中使用它的示例:

from prompt_toolkit.shortcuts import prompt_async

async def my_coroutine():
    while True:
        result = await prompt_async('Say something: ', patch_stdout=True)
        print('You said: %s' % result)

我已经成功地通过asyncio事件循环实现了这一点:

import asyncio
l = asyncio.get_event_loop()
l.create_task(my_coroutine())
l.run_forever()

Say something: Hello
You said: Hello

然而,我没能使它从龙卷风事件循环工作。我尝试了以下方法:

from tornado.ioloop import IOLoop
IOLoop.current().run_sync(my_coroutine)

这将发出初始提示,但随后会阻止控制台。你知道吗

我也尝试过:

IOLoop.current().add_callback(my_coroutine)
IOLoop.current().start()

这会执行相同的操作,但也会产生错误消息:

RuntimeWarning: coroutine 'my_coroutine' was never awaited

我试过:

IOLoop.current().spawn_callback(my_coroutine)
IOLoop.current().start()

我显然不明白这里有什么。你知道吗

有人能解释一下应该怎么做吗?你知道吗

我正在使用:python3.5.0,tornado 4.3。你知道吗


Tags: 方法fromimportasynciotrueasyncmy事件
1条回答
网友
1楼 · 发布于 2024-04-26 18:15:40

要使用Tornado's asyncio integration,必须告诉Tornado使用asyncio事件循环。通常,这意味着在应用程序开始时执行以下操作:

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

相关问题 更多 >