2016-09-30 74 views
0

我想從使用tornado事件循環的應用程序中使用prompt_toolkit,但我無法找到將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,龍捲風4.3。

回答

0

要使用Tornado's asyncio integration,您必須告訴Tornado使用asyncio事件循環。通常,這意味着在您的應用程序開始時執行此操作:

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