2012-09-29 19 views
14

Los documentos psycopg dicen: "Las conexiones Psycopg no son seguras para hilos verdes y no pueden usarse simultáneamente por diferentes hilos verdes. Intentar ejecutar más de un comando al tiempo usando un cursor por hilo dará como resultado un error (o un punto muerto) en versiones anteriores a la 2.4.2). Por lo tanto, se recomienda a los programadores que eviten compartir conexiones entre corutinas o que utilicen un bloqueo compatible con bibliotecas para sincronizar conexiones compartidas, por ejemplo, para la puesta en común. "¿Cómo puedo unir conexiones utilizando psycopg y gevent?

No encuentro una implementación del grupo que sea segura para hilos verdes. ¿Hay alguna por ahí?

Respuesta

12

Asumo que sabes gevent-psycopg2 módulo, lo que hace psycopg greenlet ambiente.

en busca de solución de agrupación de conexiones He intentado 2 soluciones:

  • SQLALchemy - parece que funciona correctamente con hilos mono-parcheado y gevent-psycopg2. La clase QueuePool usa el módulo threading internamente para el bloqueo, por lo que es necesario parchar el mono, aunque gevent-psycopg2 hace psycopg2 verde.

  • hay un psycopg2connection pooling example en gevent ejemplos

que he probado ambas soluciones, pero no en la carga de producción - lo que no puedo decir acerca de su robustez aún.

+0

Finalizado con el ejemplo de agrupación de conexiones en gevent docs – gone

+1

Enlace actualizado al ejemplo de psycopg2 gevent: https://github.com/gevent/gevent/blob/master/examples/psycopg2_pool.py –

+0

Gracias, acabo de actualizar la respuesta. –

0

He aquí una buena piscina (no sólo ejemplo, sino que se utiliza en la producción): psycopg2_pool.py

+0

es posible utilizarlo con sqlalchemy? – Stephan

Cuestiones relacionadas