2016-11-07 3 views
0

현재 내 모든 기능은 @tornado.gen.coroutine으로 꾸며져 있습니다. 새 async/await으로 이동하고 싶습니다. 그 문서에서와 같이 내가 asyncio IOLoop과 토네이도를 시작해야한다는 것을 의미 하는가 비동기로 이동하려면토네이도 asyncio 질문

:

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

내가 async/await를 사용하는 대신 yield 일부 공동 루틴을 변경이 작동 듯 오래된 토네이도 IOLoop에 왜 내가 asyncio를 써서 토네이도 엔진을 명시 적으로 시작하지 않았습니까? 이 라인은 await를 함께

responses=yield [wrap(httpClient,url) for url in somelist] 

을 달성 할 수있는 방법 : 나는 코 루틴의 목록을 얻을 어디에 내 현재 코드에서

나는 곳이?

답변

1

아니요은 asyncio의 이벤트 루프를 사용해야합니다. 토네이도는 토네이도 이벤트 루프를 사용하여 고유 한 coroutines (async def으로 정의 됨)를 실행할 수 있습니다.

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

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

당신은 같은 코 루틴의 목록을 기다리고 있습니다.

+0

안녕하세요 제시, 그렇다면 왜 asyncio 루프가 있습니까? 문서화 된대로 : http://www.tornadoweb.org/en/stable/asyncio.html?highlight=asyncio 명시 적으로 AsyncIOMainLoop을 시작할 수있는 것처럼 보입니다. 왜 비동기를 사용하고 일반 IOLoop과 함께 상자에서 꺼내기 만하면 될까요? –

+0

이것은 "async"및 "await"에 관한 것이 아닙니다. 특정 API에 의존하는 asyncio 이벤트 루프 용으로 작성된 다른 라이브러리를 사용하고 이러한 비동기 특정 라이브러리를 Tornado 관련 라이브러리 또는 Tornado 관련 코드와 통합하는 것입니다. –