2017-02-18 10 views
0

私はメインプログラムと各スレッドでpymongoを使用するマルチスレッドプログラムを持っています。 pymongoは接続ごとに2つのスレッドを作成するので、どのようにpymongoによって作成されたスレッドの数を見つけることができますか?pymongoアクティブスレッドの数を取得する方法は?

threading.activeCount() 

私は、上記のコマンドで、合計アクティブなスレッドを得ることができますが、私はpymongoに属するどのくらいか分かりません。

答えて

2

MongoDBシェルには、db.serverStatus()というコマンドがあります。

接続を含むサーバーの状態を示します。あなたのPythonコードでpymongoでそれを使用することができます。

con = db.command("serverStatus")["connections"]; 
Current_con = con["current"] #Int Value. 

conはJSONオブジェクトです。

1

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の管理者向けに書かれています。

関連する問題