如何获取pymongo活动线程的数量?

时间:2017-02-18 19:17:56

标签: python multithreading pymongo

我有一个在主程序和每个线程中使用pymongo的多线程程序。由于pymongo将为每个连接创建2个线程,我怎样才能找到pymongo创建的线程数?

threading.activeCount()

我可以通过上述命令获得完全活跃的线程,但我不知道pymongo有多少属于。

2 个答案:

答案 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维护者。