我正在尝试使用来自使用tornado事件循环的应用程序的prompt_toolkit,但是我无法找到将prompt_toolkit提示添加到事件循环的正确方法。
prompt_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()
我在这里显然不明白。
任何人都可以对如何做到这一点有所了解吗?
我正在使用:Python 3.5.0,tornado 4.3。
答案 0 :(得分:0)
要使用Tornado's asyncio integration,您必须告诉Tornado使用asyncio事件循环。通常,这意味着在您的应用开始时执行此操作:
output = [l[:-1] for l in x]