当前位置: 首页 > 知识库问答 >
问题:

我怎么可以池的连接使用心理和gevents?

乐正镜
2023-03-14

心理医生说:“心理医生连接不是绿色线程安全的,不能由不同的绿色线程并发使用。试图在每个线程中使用一个游标同时执行多个命令将导致错误(或2.4.2之前版本的死锁)。因此,建议程序员避免在协程之间共享连接,或者使用库友好的锁来同步共享连接,例如用于池。"

我找不到一个绿色线程安全的池的实现——外面有吗?

共有3个答案

葛兴发
2023-03-14

这里有一个很好的池(不仅仅是示例,还用于生产):psycopg2_pool.py

钮实
2023-03-14

如果您调用gevent.monkey.patch_thread(),您应该能够使用psycopg2.pool.ThreadedConnectionPool

  • 文件:http://initd.org/psycopg/docs/pool.html#psycopg2.pool.ThreadedConnectionPool
  • 资料来源:https://github.com/dvarrazzo/psycopg/blob/2_4_5/lib/pool.py#L173
翟冯浩
2023-03-14

我假设你知道gevent-CPIPCOG2模块,它使CPIPCOG绿色友好。

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

>

  • SQLALchemy-它似乎可以正常使用猴子补丁线程和gevent-psycopg2QueuePool类在内部使用threading模块进行锁定,因此需要使用猴子补丁,即使gevent-psycopg2使psycopg2变为绿色。

    gevent示例中有一个psycopg2连接池示例

    我已经尝试了这两种解决方案,但不是在生产负载下——所以我还不能说它们的健壮性。

  •  类似资料:
    • 问题内容: 我试图确定我是否实际上正在使用JDBC连接池。经过研究后,实现似乎太容易了。实际上比常规连接容易,所以我想验证一下。 这是我的连接类: } 这是真正的连接池吗?我在另一个类中使用连接是这样的: 问题答案: 假设它是来自DBCP的,那么是的,您正在使用连接池。但是,您将在每次获取连接时重新创建另一个连接池。您并不是真正地在同一个池中合并连接。您只需在应用程序启动时创建一次连接池,并从中获

    • Microprofile允许从RestClient定义connectionPoolSize,如下所示: 当我在我的项目中设置此属性时,Quarkus会忽略它。我该如何定义它?

    • 我正在用vaadin和spring开发一个Web应用程序java,比如容器和eclipse链接,比如持久化框架。现在我想在我的应用程序中使用一个连接池。我在谷歌上读了一些我还没读到的东西。这是我的应用程序配置: 我的春日文脉 我的persistence.xml 但我得到以下异常:

    • 考虑以下连接列表: 在一分钟内经过一段短时间后: 在我写完这个stackoverflow后: 语境: 这是一些第三供应商应用程序打开连接(源代码对我们不可用,所以我们不知道详细信息)。我们知道他们的连接管理很糟糕,他们也知道这一点。这是可怕的,因为你们可以在第一个表90850182中看到连接泄漏。如果其他人重置了他们的计时器,那么这个计时器开始无限期地老化。在旧版本的应用程序中,它将永远存在。在较

    • 问题内容: 我刚刚开始使用BoneCP,这是我第一次使用连接池。对于应该如何使用它,我有些困惑。当前,我将BoneCP对象保存为静态变量,因此可以在不同的连接之间使用它。 连接完成后,用关闭。 我应该这样做,还是不应该关闭它以使其能够被池重用? 这是我当前获得连接的实现: 这似乎是正确的,还是我误解了我应该如何使用BoneCP? 问题答案: 除了使您的私有静态最终变量和将init更改为静态块(或者