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

Gevent与流服务器的数据库连接池

孟树
2023-03-14

我使用PythonGevent的流服务器与另一台机器(远程)进行通信,该机器发送并发TCP/IP请求(平均每秒钟60个请求)。这种通信的本质主要是IO绑定的(短文本,然后是音频流)。我打算使用Postgresql存储每次通信的结果(例如:从远程服务器接收的文件名)。

我认为为Streamserver中生成的每个greenlet调用一个新的db连接是个坏主意(池大小为90所以90 req/sec max,这是我期望的最大值,平均60 req/sec)。是否有可能拥有可以排队的db连接池,并且每个greenlet在开始运行处理程序函数时从池中获取db连接?是否有适用于生产系统的教程?你有什么建议?我正在Ubuntu 10.04 64位上使用gevent 0.13.8和postgres 9.1以及Python 2.7.3。

共有3个答案

闻人锦
2023-03-14

实际上,我在这里回答了一个类似的答案:
Python Postgres精神病学2 ThreadedConnectionPool筋疲力尽

基本上,我正在使用gevent设置异步连接池,通过postgres启动线程池连接,并将“绿色”连接状态添加到postgres。

因此,基本上,这创建了一个您指定的预设连接池(如100),然后使用该池将查询排队,当一个查询返回时,将处理一个新查询。与普通的postgres池相比,我更喜欢这种方法,因为请求的异步性质以及在网络框架内易于实现。

南门英飙
2023-03-14

Gevent在示例中包括一个postgres数据库池:

https://github.com/gevent/gevent/blob/master/examples/psycopg2_pool.py

刁俊人
2023-03-14

应用程序内池的另一种选择是使用PgBounser进行池。您仍然有传输控制协议和一点点设置的开销,但比创建一个全新的PostgreSQL会话要少得多。

与应用程序池不同,PgBouncer可以透明地引入现有系统,作为PostgreSQL和池之间的中介。只需将PostgreSQl移动到端口5433,并让PgBouncer监听端口5432。

 类似资料:
  • 前言 数据库是 laravel 及其重要的组成部分,大致的讲,laravel 的数据库功能可以分为两部分:数据库 DB、数据库 Eloquent Model。数据库的 Eloquent 是功能十分丰富的 ORM,让我们可以避免写繁杂的 sql 语句。数据库 DB 是比较底层的与 pdo 交互的功能,Eloquent 的底层依赖于 DB。本文将会介绍数据库 DB 中关于数据库服务的启动与连接部分。

  • 我读过萨姆·纽曼的《微服务》一书,在关于分裂整体的一章中,他举了一个“打破外键关系”的例子,他承认跨API进行连接会更慢--但他接着说,如果你的应用程序足够快,它比以前慢有关系吗? 这似乎有点油嘴滑舌?人的经历是什么?您使用了哪些技术来使API联接执行得令人满意?

  • 我创建了一个简单的Spring启动应用程序,以使用相同的网络通过docker与MYSQL通信。一旦我运行命令,就会发生以下错误 雇员-jdbc-容器|java.sql.SQLNon瞬态连接异常:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。 员工jdbc容器|由:com引起。mysql。cj。例外情况。UnableToConnectionException:不允许检索公钥 docker编写

  • 问题内容: 我今天搬到了macOS,并重新创建了一个非常简单的数据库测试项目来检查mySQL连接。但是我收到一个SQL异常:“无法创建与数据库服务器的连接”。这是完整的日志: https //pastebin.com/iZrktVKn 我照搬了我在Windows上所做的每一步。在Windows上,一切都很好。我有一个context.xml,一个Servlet和一个connector.jar文件。该

  • Payara错误 连接池 资源 本地数据库 https://pastebin.com/QSKEL0Kd 我用mysql workbench在localhost上创建了一个数据库,用户:root,端口:3306,密码正确。当我输入localhost时,我也检查了两次,但没有工作

  • 我的在live server上类似这样的环境文件设置。但当我在的时候 错误是 我使用这个主机和密码通过putty访问我的sshhttp://5.100.156.10:2082我很困惑。