2017-10-29 7 views
0

以前はタイムアウト制御にasyncio.wait_forを使用していましたが、かなりうまくいきました。最近、私はaiohttpパッケージを学び、その代わりにasyncio_timeout.timeoutをタイムアウト制御に使用していることがわかりました。次に、asyncio_timeoutのgithubページ(https://github.com/aio-libs/async-timeout)を読みました。著者は、それがasyncio.wait_forより速く実行されると主張した。だから私は2つの質問があります:async_timeout.timeoutとasyncio.wait_for

  1. asyncio_timeout.timeoutは完全にasyncio.wait_forを置き換えますか?速度を上げるためにすべてasyncio.wait_forを交換する必要がありますか?私はwebsocketクライアントを書いていて、asyncio.wait_forは現在、よく呼ばれるwebsocket.recvを管理しています。
  2. 「使用例」(https://github.com/aio-libs/async-timeout)の部分には、async withasyncio_timeout.timeoutを使用する必要があります。しかし、aiohttpのヘルプページでは、async withhttp://aiohttp.readthedocs.io/en/stable/)の代わりにwithを使用しています。だからどちらが正しいのですか?

答えて

1
  1. asyncio_timeout.timeoutは、真のasyncio.wait_forよりも高速です。 wait_for新しいタスクを作成します。アプリケーションコードでは問題ありませんが、ライブラリでは十分です。たとえばasyncpgwait_forを使用しようとしましたが、速度を上げるために拒否されました。しかし、あなたのハイレベルな図書館では、その違いは重要ではありません。
  2. asyncio_timeouttornado.web.RequestHandler.get除いてどこでも使用することができ等のトルネードはまだタスクの取り消しをサポートしていない、私はそれがasync withだけwithの両方で動作しますasync_timeout.timeout竜巻5.0
  3. 技術的に修正されることを願っています。人々はwithステートメントで何度も混乱しました:asyncio世界の非同期操作が推奨されています。そのため、私は非同期コンテキストマネージャのサポートを追加し、この使用法を推奨しています。 withは、とにかく下位互換性のために長い間サポートされるでしょう - 私はこの構文を奨励したくありません。
関連する問題