私はメインプログラムと各スレッドでpymongoを使用するマルチスレッドプログラムを持っています。 pymongoは接続ごとに2つのスレッドを作成するので、どのようにpymongoによって作成されたスレッドの数を見つけることができますか?pymongoアクティブスレッドの数を取得する方法は?
threading.activeCount()
私は、上記のコマンドで、合計アクティブなスレッドを得ることができますが、私はpymongoに属するどのくらいか分かりません。
私はメインプログラムと各スレッドでpymongoを使用するマルチスレッドプログラムを持っています。 pymongoは接続ごとに2つのスレッドを作成するので、どのようにpymongoによって作成されたスレッドの数を見つけることができますか?pymongoアクティブスレッドの数を取得する方法は?
threading.activeCount()
私は、上記のコマンドで、合計アクティブなスレッドを得ることができますが、私はpymongoに属するどのくらいか分かりません。
MongoDBシェルには、db.serverStatus()
というコマンドがあります。
接続を含むサーバーの状態を示します。あなたのPythonコードでpymongo
でそれを使用することができます。
con = db.command("serverStatus")["connections"];
Current_con = con["current"] #Int Value.
注con
はJSONオブジェクトです。
PyMongoは、接続ごとに2つのスレッドを作成しません。各MongoClientには、定期的なクリーンアップタスクのための1つのバックグラウンドスレッドと、MongoDBサーバーの状態を監視するためのサーバーごとのバックグラウンドスレッドがあります。二つのスレッドの総産卵、27017:
c = MongoClient("mongodb://localhost")
あなたがこれを行う場合:
c = MongoClient("mongodb://host1,host2/?replicaSet=my_replica_set")
を次にPyMongoは、レプリカセットのメンバーを発見するでしょう、あなたが作成するのであれば、デフォルトでは、それがローカルホスト上のサーバーに接続しMongoClient全体のセットが検出されるまでスレッドを監視して監視します。つまり、3人のメンバーがいる場合、PyMongoは4つのスレッドを生成します。
短い答えは、PyMongoが開始されているスレッドの数を知るために、あなたは定期的にこれを実行する必要があります
PyMongoはを知っているサーバーの数に加え、クリーンアップスレッドの一つですlen(c.nodes) + 1
。
A brief explanation is here, where the FAQ says "MongoClient spawns multiple threads to run background tasks such as monitoring connected servers."私はvery thorough explanation of PyMongo's use of threads hereも書いています。これは主に将来のPyMongoの管理者向けに書かれています。