PyMongoで接続プールはどのように機能しますか?
すべての接続インスタンスには、組み込みの接続プールがあります。デフォルトでは、各スレッドは最初の操作で独自のソケットを予約します。これらのソケットは、end_request()がそのスレッドによって呼び出されるまで保持されます。
end_request()を呼び出すと、ソケットをプールに戻し、新しいソケットを作成する代わりに他のスレッドで使用できるようになります。このメソッドの賢明な使用は、多くのスレッドを持つアプリケーション、またはPyMongooperationsへの呼び出しがほとんどない長時間実行スレッドを持つアプリケーションにとって重要です。 。
または、auto_start_request =Falseで作成された接続は、すべてのスレッド間でソケットを(安全に)共有します。
それはあなたが持っているアプリケーションのタイプとリクエストが接続を保持する期間にかかっていると思います。 end_request
を呼び出すというアイデア 長時間実行されるリクエストがソケットを長時間保持し、多くのソケットが作成されるのを助けます。単一のリクエストで接続が不要になったときに接続を解放できる場合は、ソケットを他のリクエストに再利用できます。
それらが高速リクエストの場合、auto_start_request=False
だと思います ソケットを再利用することで機能します。
接続が同じソケットを使用し続けることを保証することは、それが一貫した読み取りを持つことを意味します。クエリを実行したが遅延した場合、すぐに別のクエリを実行し、別のソケットを使用したかどうかを考えてみてください。このソケットは、前のソケットよりも前に応答することができます。以前の書き込みを反映していないため、データに一貫性がなくなる可能性があります。