擅长:python、mysql、java
<p>PyMongo不会为每个连接创建两个线程。每个MongoClient都有一个用于定期清理任务的后台线程,以及一个用于监视MongoDB服务器状态的后台线程。因此,如果您创建默认的MongoClient,它将连接到上的一个服务器本地主机:27017,总共生成两个线程:</p>
<pre><code>c = MongoClient("mongodb://localhost")
</code></pre>
<p>如果您这样做:</p>
^{pr2}$
<p>然后PyMongo将发现副本集成员并生成线程来监视它们,直到它发现了整个副本集。因此,如果您有一个三成员集,PyMongo将生成四个线程。在</p>
<p>简而言之,要知道PyMongo已经启动的线程数,那么应该定期执行以下操作:</p>
<pre><code>len(c.nodes) + 1
</code></pre>
<p>这是PyMongo知道的服务器数量,加上一个用于清理线程。在</p>
<p><a href="http://api.mongodb.com/python/current/faq.html#is-pymongo-fork-safe" rel="nofollow noreferrer">A brief explanation is here, where the FAQ says "MongoClient spawns multiple threads to run background tasks such as monitoring connected servers."</a>我还写了一个<a href="http://api.mongodb.com/python/current/developer/periodic_executor.html" rel="nofollow noreferrer">very thorough explanation of PyMongo's use of threads here</a>,主要面向未来的PyMongo维护人员。在</p>