2016-11-30 2 views
0

Я использую тонкий слой python для подключения к базе данных Mongo. Я называю python из C++, и это отлично работает.Почему pymongo нерестится (так много) ожидающих соединений?

Так C++ -> Python -> Монго и обратно в Python -> C++

Я использую PyMongo и я на Windows Seven.

Я хочу знать, если база данных Монго это и работает, так что я сделать что-то вроде этого в Python: (пожалуйста, не беспокойтесь о причудливом переменной возвратного)

client = MongoClient('localhost', 27017, serverSelectionTimeoutMS = 20) 
ret=[] 
try: 
    client.server_info() 
    ret.append("up") 
    client.close() 
except Exception as e: 
    ret.append("down") 

return ret 

Но это, когда сервер UP, неизменный порождает процесс (процесс «хакер» -> сеть) сидит и ждет, пока он не истечет, а не через 20 миллисекунд, но, кажется, 30 секунд. Когда я проверяю, работает ли база данных, довольно часто, я получаю сотни сеансов ожидания, процессов/соединений.

Я делаю что-то неправильно или PyMongo не так хорошо работает в Windows?

Спасибо!

+0

Создает процесс, или нить? Откуда вы знаете, что что-то порождается - это из диспетчера задач Windows, который отслеживает вашу клиентскую программу? Или вы видите что-то в журнале mongod? –

+0

Это открытые TCP/IP-соединения (так что некоторые формы процесса, я думаю), и я вижу их в Process Hackers -> Network Tab. – Valmond

ответ

0

я получил вокруг него и, как кажется, нет никакого реального исправления этой проблемы, и что эта проблема может/будет вызывать странные проблемы, я думала, что я бы поделиться своим затруднительным:

1: сделать и использовать глобальное соединение, не подключайте и не закрывайте, не используйте повторно.

при проверке, если база данных или нет, сначала проверьте, есть ли глобальное соединение

2: если да, то использовать его. Если он был отброшен (что должно «никогда» не происходить, только когда говорят о перезагрузке вашего сервера или сбое оборудования), тайм-аут будет длинным.

3: Если этого не существует, используйте мой код с serverSelectionTimeoutMS = 20, который не будет порождать другой ожидающий поток/процесс, а также быстро.

Смежные вопросы