Python+SQLite数据库实现服务端高并发写入

2021-01-12 14:48:15 浏览数 (1)

=======================

问题描述:

SQLite数据库同一时刻只允许单个线程写入,很多服务端程序会开很多线程,每个线程为一个客户端服务,如果有多个客户端同时发起写入请求,在服务端会因为某个线程尚未写入完成尚未解除对数据库的锁定而导致其他线程无法在限定的时间内完成写入操作而抛出异常,提示“database is locked”。

如果编写高并发的服务端程序,一定要对数据库的写入操作进行有效管理,常用的方案有两个:1)使用锁机制使得多个线程竞争进入临界区,确保同一时刻只有一个线程执行写入数据库的代码;2)连接数据库时设置参数timeout,设置当数据库处于锁定状态时最长等待时间,sqlite3.connect()函数的参数timeout默认值为5秒,不适合服务端程序。但是参数timeout设置为多少更合适取决于具体的应用场景,虽然形式简洁,但是不如第一种方法通用。

演示代码如下,可以注释掉两种方案的代码,多次运行程序观察运行状态。

0 人点赞