PyMongo не создает два потока для каждого соединения. Каждый MongoClient имеет один фоновый поток для периодических задач очистки, а также фоновый поток на сервер для мониторинга состояния ваших серверов MongoDB. Так что, если вы создаете по умолчанию MongoClient он подключается к одному серверу на локальном хосте: 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.