python - 如何使用 psycopg 和 gevent 合并连接?

标签 python postgresql asynchronous gevent psycopg

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

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

最佳答案

我假设你知道 gevent-psycopg2模块,它使 psycopg 对 greenlet 友好。

寻找连接池解决方案我已经尝试了 2 种解决方案:

  • SQLALchemy - 它似乎可以与 monkey-patched 线程和 gevent-psycopg2 一起正常工作。 QueuePool类在内部使用 threading 模块进行锁定,因此需要猴子补丁,即使 gevent-psycopg2 使 psycopg2 变绿。

    <
  • 有一个psycopg2 connection pooling examplegevent 示例中

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

关于python - 如何使用 psycopg 和 gevent 合并连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12650048/

相关文章:

python - 导入单个 Django 设置常量以避免完整设置导入开销的正确方法?

regex - regexp_replace 上的函数导致 Postgres

javascript - 如何在 javascript 中实现类似同步的行为?

python - 优化docker镜像大小

python - 如何以及何时在 Python 中适本地使用弱引用

ruby-on-rails - Rails - 当 Omniauth 集成不存在时生成电子邮件地址

C++ 被 Linux 系统和异步线程上的 epoll 和 socket fd 弄糊涂了

http - Node.js:node.js 中是否有 `http.get` 方法的同步版本?

python - pickle 和编码问题

postgresql - postgres如何只查询一段时间内每一秒的最后一条记录