基于同步队列的多线程安全资源池

queuepool的Python项目详细描述


例如,psycopg2.pool(https://github.com/psycopg/psycopg2/blob/master/lib/pool.py)的主要问题是,当池中不再有连接时,池引发异常(而不是阻塞),并且您必须将连接数与工作进程数匹配,或者实现重试逻辑。此外,它没有实现连接回收(超时或使用计数),因此,不能完全解决陈旧连接的问题,也不适合大型生产安装(规模更大)。

此实现基于同步队列(https://docs.python.org/3/library/queue.html),因此是多线程安全的。这是一个来自Java版本的流线型端口,大约10年前实现,此后一直在我们的一个金融客户的大型生产环境中运行。

此实现功能:

  • 一个通用资源池,可以为特定资源(如psycopg2连接)进行扩展。提供了psycopg2连接池实现。
  • 按需懒资源开放。
  • 空闲和打开超时循环。需要用户代码定期执行pool.recycle()方法(或通过pool.start recycler()启动回收程序线程),例如每分钟执行一次。如果不定期执行此方法,则仅当资源被获取或返回到池时才执行回收,因此,池可以累积超过空闲或打开超时的空闲连接数。
  • 使用计数回收。
  • 例外情况下回收。
  • 在资源状态下回收。
  • 上下文管理器允许将池与“with”上下文管理器一起使用,以便资源可以安全地返回到池中。
  • 后进先出队列帮助池将打开的资源数保持在最小。

此池可以成功地用于大型生产安装,因为它试图将开放资源的数量保持在最小,同时提供足够数量的“热”(开放)资源以避免打开/关闭成本。

许可证

OSI批准的3条款BSD许可证

先决条件

  • python 3.7+(带队列)
  • 对于psycopg2连接:psycopg2 2.8.2+

安装

如果满足先决条件,您可以像任何其他python包一样安装队列池,使用pip从pypi下载它:

$ pip install queuepool

或者使用setup.py如果您已经在本地下载了源包:

$ python setup.py build $ sudo python setup.py install

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
SimpleDataFormat如何在Java中使用DateFormat解析月份完整格式字符串?   java如何使用JBPM引导规则创建规则流组?   java将SQL和应用程序服务器从Windows 2003迁移到Windows server 2012 R2   java游戏!Intellij IDEA中的2.0控制台无法工作   java如何获取线程内分配的变量值?   java Android翻译动画导致Clicklistener问题   当前平台不支持java桌面API   java删除hashmap条目的方法是什么   用Spring MVC提供Java模型的RDF表示?   JAVA未安装Java的计算机上的lang.UnsupportedClassVersionError   java SQLite从3个表中获取使用组合的对象列表   来自的TLS握手错误的java云数据流BQ输出挂起作业   java如何使用SPARQL进行排名?   java如何在Netbeans 7.1.2中设置${user}的值?   java如何删除括号内的字符串?