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

2024-09-25 00:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多线程程序,在主程序和每个线程中使用pymongo。既然pymongo将为每个连接创建2个线程,那么我如何才能找到pymongo创建的线程数?在

threading.activeCount()

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


Tags: 命令程序线程threadingpymongo主程序activecount
2条回答

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

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

如果您这样做:

^{pr2}$

然后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维护人员。在

mongodbshell中有一个命令:db.serverStatus()。在

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

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

注意con是一个JSON对象。在

相关问题 更多 >