2024-09-25 00:21:10 发布
网友
我有一个多线程程序,在主程序和每个线程中使用pymongo。既然pymongo将为每个连接创建2个线程,那么我如何才能找到pymongo创建的线程数?在
threading.activeCount()
我可以用上面的命令得到总的活动线程数,但我不知道有多少属于pymongo。在
PyMongo不会为每个连接创建两个线程。每个MongoClient都有一个用于定期清理任务的后台线程,以及一个用于监视MongoDB服务器状态的后台线程。因此,如果您创建默认的MongoClient,它将连接到上的一个服务器本地主机:27017,总共生成两个线程:
c = MongoClient("mongodb://localhost")
如果您这样做:
然后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()。在
db.serverStatus()
它提供服务器状态,包括连接。可以在Python代码中与pymongo一起使用:
pymongo
con = db.command("serverStatus")["connections"]; Current_con = con["current"] #Int Value.
注意con是一个JSON对象。在
con
PyMongo不会为每个连接创建两个线程。每个MongoClient都有一个用于定期清理任务的后台线程,以及一个用于监视MongoDB服务器状态的后台线程。因此,如果您创建默认的MongoClient,它将连接到上的一个服务器本地主机:27017,总共生成两个线程:
如果您这样做:
^{pr2}$然后PyMongo将发现副本集成员并生成线程来监视它们,直到它发现了整个副本集。因此,如果您有一个三成员集,PyMongo将生成四个线程。在
简而言之,要知道PyMongo已经启动的线程数,那么应该定期执行以下操作:
这是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
是一个JSON对象。在相关问题 更多 >
编程相关推荐