我有一个在主程序和每个线程中使用pymongo的多线程程序。由于pymongo将为每个连接创建2个线程,我怎样才能找到pymongo创建的线程数?
threading.activeCount()
我可以通过上述命令获得完全活跃的线程,但我不知道pymongo有多少属于。
答案 0 :(得分:2)
MongoDB shell中有一个命令:db.serverStatus()
。
它提供服务器状态,包括连接。您可以在Python代码中使用pymongo
:
con = db.command("serverStatus")["connections"];
Current_con = con["current"] #Int Value.
注意con
是一个JSON对象。
答案 1 :(得分:1)
PyMongo不会为每个连接创建两个线程。每个MongoClient都有一个后台线程用于定期清理任务,每个服务器有一个后台线程用于监视MongoDB服务器的状态。因此,如果您创建默认的MongoClient,它将连接到localhost:27017上的一个服务器,产生总共两个线程:
c = MongoClient("mongodb://localhost")
如果你这样做:
c = MongoClient("mongodb://host1,host2/?replicaSet=my_replica_set")
然后PyMongo将发现副本集成员并生成线程以监视它们,直到它发现了整个集合。所以,如果你有一个三人组,PyMongo会产生四个线程。
简短回答,要知道PyMongo已启动的线程数,那么你应该定期执行:
len(c.nodes) + 1
这是PyMongo知道的服务器数量,加上一个用于清理线程的服务器。
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维护者。