Tornado
でスレッドロックを最小限に抑えるにはどうすればよいですか?実際には、私はすでに作業コードを持っていますが、完全に非同期ではないと思われます。非同期Tornadoコードを最適化します。スレッドロックを最小限にする
私は本当に長い作業をしています。 これは、CouchDB
へのいくつかの要求を行い、メタデータを取得し、最終的なリンクを構築することからなる。次に、最後のリクエストをCouchDB
にしてファイルをストリームする必要があります(10 MBから100 MBまで)。その結果、大きなファイルがクライアントにストリーミングされます。
大きなファイルをダウンロードする100回の同時リクエストをサーバーが受け取ることができ、スレッドをロックしたり、新しいリクエストを受け取ったりする必要がないという問題(スレッドロックを最小限に抑える必要があります)。
したがって、いくつかの同期要求(requests
ライブラリ)を作成してから、大きなファイルをAsyncHttpClient
というチャンクでストリームします。
次のような質問は次のとおりです。
1)私がEVERYWHERE AsyncHTTPClient
を使用する必要がありますか?私はいくつかのインターフェースを持っているので、すべての同期リクエストを非同期リクエストに置き換えるのにかなりの時間がかかります。それは価値があるのですか?
2)tornado.curl_httpclient.CurlAsyncHTTPClient
を使用しますか?コードはより速く実行されますか(ファイルのダウンロード、要求の作成)?
3)Python 3.5
がasync
に導入されていることがわかりますが、理論的には高速になる可能性があります。非同期を使用するか、デコレータ@gen.coroutine
を使用し続ける必要がありますか?