python - Conexión de pymongo y solicitudes de clientes.
(1)
Sé que pymongo
es seguro para subprocesos y tiene un grupo de conexiones incorporado.
En una aplicación web en la que estoy trabajando, estoy creando una nueva instancia de conexión en cada solicitud.
pymongo
dado que pymongo
gestiona el grupo de conexiones, no es un enfoque incorrecto crear una nueva conexión en cada solicitud, ya que al final de la solicitud, se reclamará la instancia de conexión y estará disponible en solicitudes posteriores.
¿Estoy en lo correcto aquí, o debo crear una sola instancia para usar en múltiples solicitudes?
El "enfoque incorrecto" depende de la arquitectura de su aplicación. Con pymongo siendo seguro para subprocesos y agrupación de conexiones automática, el uso real de una sola 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 en ambos casos.
Si su aplicación está enlazada, desde los documentos, cada secuencia que acceda a una conexión obtendrá su propio socket. Entonces, tanto si crea una única conexión compartida como si solicita una nueva, todo depende de si sus solicitudes están o no enlazadas.
Al usar gevent, puedes tener un socket por greenlet. Esto significa que no tiene que tener un hilo verdadero por solicitud. Las solicitudes pueden ser asíncronas y seguir teniendo su propio socket.
En una palabra:
- Si sus solicitudes de aplicación web están enlazadas, no importa de qué manera acceda a una nueva conexión. El resultado será el mismo (socket por hilo)
- Si su aplicación web es asíncrona a través de gevent, entonces no importa de qué manera acceda a una nueva conexión. El resultado será el mismo. (zócalo por greenlet)
- Si su aplicación web es asíncrona, pero NO a través de gevent, debe tener en cuenta las notas sobre el mejor flujo de trabajo sugerido .