2012-06-10 8 views
15

pymongo es seguro para subprocesos y tiene un grupo de conexiones incorporado.pymongo connection pooling y solicitudes de clientes

En una aplicación web en la que estoy trabajando, estoy creando una nueva instancia de conexión en cada solicitud.

Entiendo que como pymongo administra el grupo de conexiones, no es un enfoque incorrecto crear una nueva conexión en cada solicitud, ya que al final de la solicitud la instancia de conexión será reclamada y estará disponible en solicitudes posteriores .

¿Corrí aquí o solo debo crear una única instancia para usar en varias solicitudes?

Respuesta

8

El "enfoque incorrecto" depende de la arquitectura de su aplicación. Con pymongo seguro de subprocesos y agrupación automática de conexiones, el uso real de una única conexión compartida, o conexiones múltiples, va a "funcionar". Pero los resultados dependerán de lo que esperas que sea el comportamiento. La documentación comenta sobre ambos casos.

Si su aplicación está enhebrada, de los documentos, cada subproceso que acceda a una conexión obtendrá su propio socket. Entonces, ya sea que cree una conexión compartida individual o solicite una nueva, se trata de si sus solicitudes están enhebradas o no.

Al usar gevent, puede tener un socket por greenlet. Esto significa que no necesita tener un hilo verdadero por solicitud. Las solicitudes pueden ser asincrónicas y aún así obtener su propio socket.

En pocas palabras:

  • son roscados Si sus peticiones webapp, entonces no importa en qué dirección se accede a una nueva conexión. El resultado será el mismo (socket por hilo)
  • Si su webapp es asincrónica a través de gevent, entonces no importa de qué forma acceda a una nueva conexión. El resultado será el mismo. (socket por greenlet)
  • Si su aplicación web es asincrónica, pero NO a través de gevent, entonces debe tener en cuenta las notas en el best suggested workflow.