2017-02-10 3 views
0

Когда я определяю коллекцию PyMongo таким образом, количество потоков увеличится на 2:Почему ограничение пеймонго поднимет количество потоков?

import threading 
print threading.activeCount() 


def db_bigadevs(): 
    from pymongo import MongoClient 
    con_bigadevs = MongoClient() 
    return con_bigadevs['bigadevs'] 


class collections: 
    print 'A1 %s' % threading.activeCount() 
    col_webs = db_bigadevs()['webs'] 
    print 'A2 %s' % threading.activeCount() 

Выход:

1 
A1 1 
A2 3 

ответ

1

Каждый MongoClient имеет один фоновый поток для периодических задач очистки, а также в качестве фонового потока на сервер для мониторинга состояния ваших серверов MongoDB. Поэтому, если вы создаете MongoClient по умолчанию, он подключается к одному серверу на localhost: 27017, создавая в общей сложности два потока.

A brief explanation is here, where the FAQ says "MongoClient spawns multiple threads to run background tasks such as monitoring connected servers."I wrote a very thorough explanation of PyMongo's use of threads here, предназначенный главным образом для будущих сопровождающих PyMongo.

+0

Это дорого для исполнения программы? Является ли лучший способ избежать этих потоков? –

+0

Это не дорого, нет. Каждый поток просыпается только каждые несколько секунд и стоит несколько килобайт памяти. –