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>;` ` `.
您的问题可能会在那里得到解决,如果不是,请提交问题:)
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
以可编辑模式安装包::
有关运行测试的信息,请参见下一节。
---------
如果您还没有阅读以上指南,请先阅读。否则,
请检查"问题跟踪程序"https://github.com/smitchell556/cuttlepool/issues>;` ` `.
您的问题可能会在那里得到解决,如果不是,请提交问题:)