如何获取pymongo活动线程数?

How to get the number of pymongo active threads?

我有一个多线程程序,在主程序和每个线程中使用 pymongo。由于pymongo会为每个连接创建2个线程,我如何找到pymongo创建的线程数?

threading.activeCount()

我可以用上面的命令得到总的活动线程,但我不知道有多少属于 pymongo。

MongoDBshell中有命令:db.serverStatus().

它提供包括连接在内的服务器状态。您可以在 Python 代码中将其与 pymongo 一起使用:

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

注意 con 是一个 JSON 对象。

PyMongo 不会为每个连接创建两个线程。每个 MongoClient 都有一个后台线程用于定期清理任务,每个服务器都有一个后台线程用于监视 MongoDB 服务器的状态。因此,如果您创建默认的 MongoClient,它会连接到 localhost:27017 上的一台服务器,总共产生两个线程:

c = MongoClient("mongodb://localhost")

如果你这样做:

c = MongoClient("mongodb://host1,host2/?replicaSet=my_replica_set")

然后 PyMongo 将发现副本集成员并生成线程来监视它们,直到它发现整个副本集。因此,如果您设置了 three-member,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." I also wrote a very thorough explanation of PyMongo's use of threads here,主要面向未来的 PyMongo 维护者。