如何使用psycopg和gevent汇集连接?

时间:2012-09-29 04:53:05

标签: python postgresql asynchronous gevent psycopg

psycopg docs状态:“Psycopg连接不是绿色线程安全的,并且不能由不同的绿色线程同时使用。尝试每个线程使用一个游标执行多个命令将导致错误(或2.4.2之前版本的死锁)。 因此,建议程序员避免在协同程序之间共享连接或使用库友好的锁来同步共享连接,例如,汇集。“

我找不到绿色线程安全的池的实现 - 那里有没有?

3 个答案:

答案 0 :(得分:14)

我假设您知道gevent-psycopg2模块,这使psycopg符合绿色。

寻找连接池解决方案我尝试过两种解决方案:

  • SQLALchemy - 它似乎与猴子修补的线程和gevent-psycopg2一起正常工作。 QueuePool类在内部使用threading模块进行锁定,因此必须进行猴子修补,即使gevent-psycopg2使psycopg2变为绿色。

  • psycopg2示例中有gevent connection pooling example

我已尝试过两种解决方案,但不是在生产负载上 - 所以我还不能说它们的稳健性。

答案 1 :(得分:4)

如果您致电gevent.monkey.patch_thread(),您应该可以使用psycopg2.pool.ThreadedConnectionPool

答案 2 :(得分:0)

这是一个很好的游泳池(不只是示例,而是用于制作):psycopg2_pool.py