mongoengine에는 커넥션 제어를 위한 메소드들이 들어가 있지 않아서...
uwsgi로 프로세스를 여러개 생성하게 될 경우, parent에 맺어진 커넥션을 child process가 제대로 가져오지 못하고 데드락이 발생하는 경우가 생긴다.
사실 제목에서 언급한 uwsgi뿐만 아니라 모든 멀티프로세싱을 사용하는 앱들은 주의할 필요가 있다. (pymongo를 사용하길 권장함..)
#######/.venv/local/lib/python2.7/site-packages/pymongo/topology.py:75:
UserWarning: MongoClient opened before fork. Create MongoClient with
connect=False, or create client after forking. See PyMongo's documentation
for details:
http://api.mongodb.org/python/current/faq.html#using-pymongo-with-multiprocessing>
"MongoClient opened before fork. Create MongoClient "
(이런 빡치는 메시지와 함께 uwsgi의 리퀘스트 DB Connection을 가져오는 부분에서 hang이 걸리고 결국 타임아웃이 발생해서 박살이 난다..)
uwsgi를 띄울때 lazy옵션(--lazy 또는 ini에서는.. lazy=true)을 설정해서 해결할 수 있다.
flask mongoengine을 잘 사용하지 않는지.. 아니면 최근 발견된 문제인지는 모르겠지만..
하도 안나와서 검색에 이바지하고자 포스팅을 하게됨.
'Software Development' 카테고리의 다른 글
Vagrant, Openstack, Jenkins, Ansible을 활용한 통합 테스팅 환경 CI-CD 환경 구축 (0) | 2016.08.10 |
---|---|
Jasmine을 활용한 Front-end JS Test Automation (0) | 2016.07.21 |
JAVA - FileInputStream FileReader 차이점. (0) | 2011.10.25 |
VHDL - 예약어, 연산자 요약 (0) | 2011.03.15 |
VHDL - 개요와 역사 요약 (0) | 2011.03.15 |