2016-09-30 5 views
0

私は、竜巻イベントループを使用するアプリケーションから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 

しかし、私が持っています竜巻イベントのループからそれを動作させることに失敗しました。私は以下を試しました:

これは、最初のプロンプトを発行しますが、コンソールをブロックするように見えます。

私も試してみました:

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

Tornado's asyncio integrationを使用するには、asyncioイベントループを使用するようにTornadoに指示する必要があります。通常、これはアプリの開始時にこれを行うことを意味します:

from tornado.platform.asyncio import AsyncIOMainLoop 
AsyncIOMainLoop().install() 
関連する問題