2016-11-30 2 views
0

저는 파이썬의 얇은 층을 사용하여 몽고 데이터베이스에 연결합니다. 나는 파이썬을 C++에서 호출하고 이것이 잘 동작한다.pymongo가 너무 많은 대기 연결을 생성하는 이유는 무엇입니까?

그래서 C++ -> 파이썬 -> 몽고 다시 파이썬 -> C++

내가 PyMongo을 사용하고 있는데 나는 윈도우 세븐에있어.

가 나는 몽고의 데이터베이스가 내가 파이썬에서 같은 것을 할 그래서 실행되고 있는지 알고 싶어 :

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 작업 관리자가 클라이언트 프로그램을 모니터링합니까? 아니면 몽고 로그에서 뭔가를보고 있습니까? –

+0

그것은 열려있는 TCP/IP 연결입니다 (그래서 어떤 형태의 프로세스라고 생각합니다). 프로세스 해커 -> 네트워크 탭에서 볼 수 있습니다. – Valmond

답변

0

내가 주위 얻고 보인다으로이 문제에 대한 실제 수정 될 수 없다하고, 문제가/이상한 문제는 내가 내 수정 공유하고자 발생할 수 있음 :

1 : 확인하고를 사용 전역 연결, 연결 및 닫지 말고 다시 사용하십시오.

글로벌 연결

2가있는 경우 데이터베이스가 최대 여부를 먼저 확인하는 경우 확인 : 그래서, 그것을 사용하는 경우. 서버 또는 하드웨어 장애를 재부팅하는 경우에만 "절대로"발생하지 않아야합니다. 그러면 시간 초과가 오래 걸릴 수 있습니다.

3 : 존재하지 않는 경우 serverSelectionTimeoutMS = 20으로 코드를 사용하십시오. 그러면 대기중인 다른 스레드/프로세스가 생성되지 않으며 빠릅니다.