sql池实现

cuttlepool的Python项目详细描述


##########
cuttlepool
它的主要功能是:

由池外的任何对象引用的nger
将返回到池中。这有助于
在资源未显式返回到
池且资源包装器被垃圾回收时防止池耗尽。


资源队列
如果所有其他操作都失败,并且无法立即找到或生成资源,则
池将等待指定数量的在引发异常之前要将资源返回到池的IME。


如何指导使用cuttlepool需要使用用户定义的方法normalize resource()和ping()对"cuttlepool"对象进行子类化。下面的示例使用
``sqlite3``连接作为资源,但是cuttlepool不限于
连接驱动程序。:

>;>import sqlite3
>;>from cuttlepool import cuttlepool
>;>class sqlitepool(cuttlepool):
…定义规范化资源(自我,资源):
…resource.row_factory=无
…def ping(self,resource):
…尝试:
…rv=resource.execute('select 1').fetchall()
…返回(1,)在rv中
…除了sqlite3。错误:
…return false
>;>;pool=sqlitepool(factory=sqlite3.connect,database='ricks_lab')

让我们逐行分解这个模块。

首先,导入"sqlite3"模块。`` sqlite3.connect``将是
底层资源工厂。

``cuttlepool`被导入并子类化。"`normalize\u resource()``
方法接受一个资源,在本例中是一个由``sqlite3.connect``创建的``sqlite3.connection``实例作为参数并更改其属性。这一点很重要,因为资源在池外时可以修改,并且在此期间所做的任何修改都将持续;这可能会在以后从池中检索资源时产生意外的结果。ch还将与"normalize\u resource()"相同的资源
作为参数。`` ping()``确保
资源正常工作;在本例中,它检查``sqlite3.connection`
实例是否打开。如果资源是功能性的,``ping()``返回``true`
否则返回``false``。在上面的示例中,执行一个简单语句
,如果返回预期结果,则表示资源已打开,并返回
``true`。这个方法的实现实际上依赖于池创建的资源,甚至可能不需要。"`sqlite3.connect`"方法是与数据库名称一起传递给实例的。

pool对象接受与资源工厂无关的对象。`` capacity``设置池
在任何给定时间将保留的最大资源数。`` overflow``设置池耗尽时将创建的附加资源的最大数量。如果池具有容量,则所有溢出资源都将从池中删除。`` timeout``设置当请求资源时池
耗尽时池等待资源释放的时间量(秒)。

池中的资源可以与传递给池的资源工厂创建的实例一样对待。在我们的示例中,资源可以像"sqlite3.connection"实例一样使用
。:

>;>;con=池。获取资源()
>;>;cur=con.cursor()
>;>;cur.execute('插入车库(发明名称、状态)'
…'值(%s、%s)、("太空巡洋舰"、"损坏的")
>;>;con.commit()
>;>;cur.close()
>;>;con.close()

但不必调用"close()"。池使用:class:`weakref.ref`跟踪
资源,因此将收集所有未引用的资源并将
返回到池中。不过,调用"close()"仍然是个好主意,因为显式优于隐式。注意:
一旦对资源对象调用了"close()",就会使
对象无用。从池中接收到的资源对象是一个包装器
,它围绕实际的资源对象调用"close()",返回
资源到池中,并有效地将其从包装器中移除
留下一个空外壳来进行垃圾收集。

faq
===

如何安装?
---------

``pip install cuttlepool`


contribution
---------


强烈建议在virtualenv中开发。


fork the repository.

克隆存储库::

git clone https://github.com/<;您的用户名>;/cuttlepool.git

以可编辑模式安装包::

pip install-e.[dev]

有关运行测试的信息,请参见下一节。


---------

如果您还没有阅读以上指南,请先阅读。否则,
请检查"问题跟踪程序"https://github.com/smitchell556/cuttlepool/issues>;` ` `.
您的问题可能会在那里得到解决,如果不是,请提交问题:)



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

推荐PyPI第三方库


热门话题
在Java7和Java8中从现有列表创建不同的列表?   java如何在HP ALM中上载测试结果   java请检查我想使用的代码,当用户在第一次输入中输入0时,条件必须停止   带显示列表的java OpenGL照明   尝试获取活动的DefaultSharedReferences时发生java NullPointerException   java如何区分日期时间类型应为yyyymmdd hh:mm:ss的两个日期   Java中对象上的循环   java jvm挂起并杀死3&jmap失败   Tomcat下的java URLClassLoader   java如何对基于KinesRecord的DoFn进行单元测试?   java Estado HTTP 404–找不到Eclipse/Tomcat   java Spring:缺少必需的请求正文。无法将JSON传递给RestController   java Drools工作台目标   java@Async在REST类中不起作用   rest如何在用户使用java输入时更有效地从Yammer获取消息?   java监视递归过程中创建的内部堆栈上的值   java如何集群和负载平衡Spring+OSGi应用程序   java NotSerializableException对象