2012-06-13 3 views
3

가 내 요청에 다음, 응용 프로그램이유는,

# app.py 
mongodb_conn = pymongo.Connection(host=host, port=int(port), safe=True) 

print(mongodb_conn) # Connection('127.0.0.1', 27017) 

... 

bottle.run(...) 

시작하기 전에 연결 인스턴스를 생성하지만 오전 내 bottlepy 응용 프로그램에서 pymongo 연결 인스턴스를 공유 할 수 없습니다 다른 모듈, 그것은 mongodb_connNone

# user.py 
from app import mongodb_conn 
... 

db = mongodb_conn['somedb'] # TypeError: 'NoneType' object is not subscriptable 

누군가에 무슨 일이 일어나고 있는지 설명 할 수 있음을 말을 잘못한다?

답변

1

좋아, 문제를 해결할 수있었습니다. 모듈 로딩 명령의 일부 불일치와 관련이 있습니다.

하지만 하나의 연결 인스턴스를 캐시 한 다음 응용 프로그램의 전체 수명 동안 사용할 수 있습니다. 그리고 이는 스레드 응용 프로그램에서도 마찬가지입니다.

+0

나는 [다른 질문]을 마무리합니다. (http://stackoverflow.com/questions/10968489/pymongo-connection-pooling-and) - 클라이언트 요청) 너무? – jdi

+0

예 예 – treecoder

1

당신은 이미 모듈 오더 문제로 해결했다고 대답했으나 확장 된 대답을 포함하고 싶었습니다.

코드를 더 이상 보지 않고도 일부 순환 가져 오기를 설정하고 있다고 가정합니다. 여기서 연결은 app.py에 정의되어 있으며, 아마도 user.py를 가져 오지만 user.py imports 앱 .py 연결 개체에 대한. mongodb_conn은 그 시점에서 연관성이 없을 가능성이 큽니다.

내가 추천하는 것은 db.py라는 세 번째 모듈을 만드는 것입니다. 거기에 전역 변수 연결을 만들거나 항상 동일한 연결을 반환하는 간단한 싱글 톤 클래스를 만들거나 항상 글로벌 연결을 반환하는 getConnection()과 같은 간단한 함수를 만듭니다. 이렇게하면 순환 수입이없고 다른 모듈도 가져올 수 있습니다. db