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第三方库


热门话题
java将Scanner对象作为构造函数参数传递给UserInterface类   spring未能启动bean“subtocolWebSocketHandler”;嵌套的例外是java。lang.IllegalArgumentException:没有处理程序   Java EE应用程序中后台服务的多线程Java线程(设置守护进程和优先级)?   java Pull to refresh返回列表的第一个位置   无法将comparator类转换为java。可比的   java将json从servlet传递到dojo   JavaHibernate:将子类实例转换为超类实例   java警告调用servlet类时非法反射访问   java静态变量值   java@Entity和@embeddeble之间有什么区别   java将作业配置导入公共作业配置类(注释配置)   sql公共表表达式(以values语句开头)在java中给出错误   java在ImageJ中使用ImageProcessor   java PostgreSQL executeBatch()会随着时间的推移而变慢   java在安卓中以表格形式排列sqllite表数据?   java中SVG的swing定制呈现   java删除与另一个实体映射的实体   java何时/如何添加ListView适配器,使用back按钮恢复它?(片段)   java为什么IBinder和Binder之间的类型转换不是非法的?   java在方法参数列表中使用ArrayList或List