python sqlite多线程编程
来源:互联网 发布:大脚 mac 编辑:程序博客网 时间:2024/03/29 04:10
.前言
为什么要特别指出sqlite的多线程呢?因为创建一个sqlite连接只能给创建这个连接的线程使用,按照连接池的一般做法,先初始化几条连接conn放到池里,显然不行(别的线程用不了)。如果换一种策略,在第一次使用连接时,才由线程创建连接,然后映射到线程推到池里,在连接使用前先验证连接是否可用--这是一种不错的实现。
下面,是简单实现,不涉及池~~,有时间在实现。
- 首先,定义一个类,操作某数据库test表的增.删.查,命名为testDao,哦,no!这名命名太狗血了吧。
import threadingimport os,sqlite3class Dao(object): ''' 数据持久化处理类 ''' def __init__(self,path,name='',*args,**kwargs): ''' 初始化工作... ''' self.lock = threading.RLock() #锁 self.name = name self.path = path #数据库连接参数 db_path = self.path[:self.path.rfind(os.sep)] if os.path.exists(db_path): os.makedirs(db_path) def get_conn(self): ''' 建立连接,为什么不能设置为实例成员?自己想想,-- ''' conn = sqlite3.connect(self.path) return conn def conn_close(self,conn=None): ''' 操作完,关掉连接 ''' conn.close() def save(self,obj,conn=None): ''' 保存数据 ''' cu = conn.cursor() cu.execute(obj.to_insert_sql())
- 定义数据库连接相关的拦截器.在func调用前连接数据库,func调用结束提高事务并关闭连接.
def conn_trans(func): ''' 数据库连接相关的拦截器.在func调用前连接数据库,func调用结束提高事务并关闭连接. ''' def connection(self,*args,**kwargs): self.lock.acquire() conn = self.get_conn() kwargs['conn'] = conn rs = func(self,*args,**kwargs) self.conn_close(conn) self.lock.release() return rs return connection
- 使用拦截器,拦截save方法
@conn_trans() def save(self,obj,conn=None): ''' 保存数据 ''' cu = conn.cursor() cu.execute(obj.to_insert_sql())
- python sqlite多线程编程
- SQLite的Python编程
- 嵌入式 关于sqlite多线程编程相关小结
- Python多线程编程
- Python多线程编程
- Python多线程编程
- python 多线程编程
- python 多线程编程
- zt:python多线程编程
- Python多线程编程
- Python多线程编程
- Python多线程编程
- Python多线程编程
- python 多线程编程
- python 多线程编程
- python 多线程编程
- python多线程编程
- python多线程编程
- 表单处理、HTTP协议和GET/POST
- delphi高手突破之异常及错误处理
- 往joomla文章添加JS代码的方法
- 【编译原理】第一章 引论
- [备忘]收集的一些题集(更新中)
- python sqlite多线程编程
- grinder 测试HSF 协议
- IT研究员是产品经理中的工程师和工程师中的计算机专家——geek
- 单片机反汇编程序员居然沦落为电工!
- 关于DirectShow中摄像头的帧率设置
- <算法导论>第八章4 水壶(Kettle)
- Android sdcard相关内容
- android应用开发笔记---Activity和Intent
- HttpWatch工具简介及使用技巧