본문 바로가기

Software Development

flask-mongoengine을 uwsgi에서 사용할 때 주의할 점.

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을 잘 사용하지 않는지.. 아니면 최근 발견된 문제인지는 모르겠지만..

하도 안나와서 검색에 이바지하고자 포스팅을 하게됨.