2017-10-29 20 views
0

이전에는 시간 제한 제어에 asyncio.wait_for을 사용했으며 매우 잘 작동했습니다. 최근에 aiohttp 패키지를 배웠고 대신 시간 제한 제어를 위해 asyncio_timeout.timeout을 사용하는 것으로 나타났습니다. 그런 다음 asyncio_timeout의 github 페이지 (https://github.com/aio-libs/async-timeout)를 읽었습니다. 저자는 asyncio.wait_for보다 빨리 실행한다고 주장했습니다. 따라서 다음과 같은 두 가지 질문이 있습니다.async_timeout.timeout vs asyncio.wait_for

  1. asyncio_timeout.timeoutasyncio.wait_for으로 완전히 바꿀 수 있습니까? 속도를 높이기 위해 모두 asyncio.wait_for을 교체해야합니까? 나는 웹 소켓 클라이언트를 작성 중이며 asyncio.wait_for은 현재 자주 호출되는 websocket.recv을 제어합니다.
  2. "사용 예"(https://github.com/aio-libs/async-timeout) 섹션에서 async with과 함께 asyncio_timeout.timeout을 사용해야합니다. 그러나 aiohttp 도움말 페이지에서는 async with (http://aiohttp.readthedocs.io/en/stable/) 대신 with을 사용합니다. 그럼 어느 것이 옳은가요?

답변

1
  1. asyncio_timeout.timeout는 사실 asyncio.wait_for보다 빠릅니다. wait_for 새 작업을 만듭니다. 응용 프로그램 코드는 중요하지 않지만 라이브러리는 매우 중요합니다. 예를 들어 asyncpgwait_for을 사용하려했지만 속도를 위해 거부되었습니다. 그러나 상위 라이브러리에 대한 가능성은 그 차이가 중요하지 않습니다.
  2. asyncio_timeout
  3. 이 작업 취소를 지원하지 않습니다 여전히 tornado.web.RequestHandler.get 등 토네이도를 제외하고 모든 곳에서 사용할 수, 나는 그것이 5.0
  4. 기술적 async_timeout.timeout 모두 async with 그냥 with 작동 토네이도에서 해결 될 것입니다 바랍니다. 사람들은 with 문장으로 여러 번 혼동되었습니다. asyncio 세계 비동기 작업이 권장됩니다. 그래서 비동기 컨텍스트 관리자 지원을 추가하고 이러한 사용을 권장합니다. with은 이전 버전과의 호환성을 위해 오랫동안 지원 될 것입니다.이 구문을 권장하지 않으려 고합니다.