psycopg docs状态:“Psycopg连接不是绿色线程安全的,并且不能由不同的绿色线程同时使用。尝试每个线程使用一个游标执行多个命令将导致错误(或2.4.2之前版本的死锁)。 因此,建议程序员避免在协同程序之间共享连接或使用库友好的锁来同步共享连接,例如,汇集。“
我找不到绿色线程安全的池的实现 - 那里有没有?
答案 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