2016-05-20 8 views
1

Ich habe eine Django-App mit einem MySQL-Backend und ich möchte MongoDB verwenden, um einige zusätzliche (nicht-relationale) Daten zu speichern. Ich möchte nicht MongoDB mit Django's ORM verwenden, einfach einfach PyMongo. Wo würde ich PyMongo initialisieren, um einen Verbindungspool zu haben, der zwischen all meinen Python-Prozessen geteilt wird, die von uwsgi erzeugt werden?PyMongo mit Django und uwsgi

Meine uwsgi Config sieht wie folgt aus:

[uwsgi] 
... 
module = myapp.wsgi:application 
virtualenv = /var/www/virtualenvs/myapp/ 
processes = 100 
enable-threads = True 
single-interpreter = True 
uid = www-data 
gid = www-data 
vacuum = True 
... 

Dies schafft 100 Python Prozesse, bei denen jeder von ihnen einen separaten MongoClient Connection-Pool mit mehreren Verbindungen zu MongoDB hat. Dies ist sehr ineffizient. Wie kann ich einen Verbindungspool haben, der von allen Prozessen gemeinsam genutzt wird?

Vielen Dank im Voraus!

Antwort

1

PyMongo ist fadensicher, aber nicht gabelsicher. uWSGI erstellt mehrere Prozesse durch Forking und jeder Prozess hat seinen eigenen MongoClient.

Is PyMongo fork-safe?

PyMongo nicht Verbindungen über Threads teilen. Eine Möglichkeit, die Anzahl der Verbindungen zu Mongo zu reduzieren, wäre, die Größe des Threadpools zu verringern.

In PyMongo 3 übergeben maxPoolSize = 1