私はObject Poolが必要です。それを自分で実装するのではなく、既成のテスト済みのPythonライブラリを見回すと思いました。オブジェクトプールデザインパターンのPython実装
私が見つけたのは他の多くの人々lookingでしたが、多くのストレートな回答が得られなかったので、ここでスタックオーバーフローを起こしました。
私の場合、リモートSOAPベースのサーバーを時折呼び出す必要があるスレッドが多数あります(threading
モジュールを使用しています)。彼らはそれぞれサーバーに独自の接続を確立することができますが、ソケットの設定と認証プロセスの完了はコストがかかります(サーバーによって抑制される)ので、必要に応じてさらに多くの接続を共有したいと考えています。
プールするアイテムがワーカーサブプロセスの場合は、multiprocessing.pool
を選択した可能性がありますが、そうではありません。彼らがワーカースレッドであれば、私はthis implementationを選択しているかもしれませんが、そうではありません。
MySQL接続の場合はpysqlpoolを選択した可能性がありますが、そうではありません。同様にSQLAlchemy Poolが出ています。
可変数の接続/オブジェクトを使用するスレッドが1つあった場合、私はthis implementationと考えていますが、スレッドセーフである必要があります。
私はこれをかなり迅速に実装することができると知っていますが、探している人が多いことを考えれば、スタックオーバーフローに関する標準的な答えがいいと思っていました。
ああ、プールに何も残っていなければ、リストが欠けているのです。私はキューの代わりにリストで賢いと思ったけど、実際にはあまりにも巧妙だった。 :) –
@Lennart、スレッド安全性の保証もなく、実装によっては問題が発生する場合もあります。Queue.Queueを使用すると、スレッドの安全性が保証されます。 –
Pythonにはスレッドセーフなキューが既に組み込まれていますか?私はそれを知らなかった!はい、それは実装をスピードアップします(私は短いと思っていましたが、主に並行性の問題を考えて費やしました)。申し訳ありませんが、私は "プールのプール"対 "オブジェクトのプール"の違いを理解していませんでした。私は「接続のプールを共有したい」と言ったが、それらの接続のそれぞれはオブジェクト内にラップされているので、実際にはオブジェクトのプールでもある。しかし、私が作成しようとしていたのは、接続オブジェクトがアクティブではないということです(マルチプロセッシングプールと違い) – Oddthinking