Windows下Python 3.8如何跨进程共享内存式SQLite数据库?
跨进程共享内存式SQLite数据库的实现方案
- 核心结论:跨进程共享内存式SQLite是可行的,但同一进程内使用的
cache=sharedURI模式无法直接跨进程复用——该模式的内存数据库仅存在于单个进程的私有内存空间,不同进程无法直接访问。
Windows系统(Python 3.8)实现方法
Windows下可通过两种方式实现跨进程内存共享:
- 内存映射文件方式
创建命名内存映射文件作为SQLite的存储介质,不同进程通过打开同一个映射文件共享数据库:
进程1(创建并初始化数据库):
进程2(读取共享数据库):import sqlite3 import mmap # 创建10MB大小的内存映射文件 with open("sqlite_shared_mem.db", "w+b") as f: f.truncate(10 * 1024 * 1024) with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE) as mm: # 连接到内存映射文件 conn = sqlite3.connect("sqlite_shared_mem.db", check_same_thread=False) cursor = conn.cursor() cursor.execute("CREATE TABLE demo (id INT PRIMARY KEY, content TEXT)") cursor.execute("INSERT INTO demo VALUES (1, '跨进程共享测试')") conn.commit() input("保持进程运行,等待其他进程访问...") conn.close()import sqlite3 import mmap with open("sqlite_shared_mem.db", "r+b") as f: with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm: conn = sqlite3.connect("sqlite_shared_mem.db", check_same_thread=False) cursor = conn.cursor() cursor.execute("SELECT * FROM demo") print(cursor.fetchone()) # 输出:(1, '跨进程共享测试') conn.close() - 虚拟内存磁盘方式
借助第三方RamDisk工具创建内存虚拟磁盘,将SQLite数据库文件放在该磁盘上,不同进程直接连接磁盘上的数据库文件即可,数据仅存于内存中,操作逻辑和普通文件数据库一致。
Linux系统实现方法
Linux下可直接挂载tmpfs(内存文件系统),将SQLite数据库放在挂载点下实现内存级跨进程共享:
- 挂载tmpfs:
sudo mount -t tmpfs -o size=10M tmpfs /mnt/sqlite_mem - 进程连接该目录下的数据库:
import sqlite3 conn = sqlite3.connect("/mnt/sqlite_mem/shared.db") # 后续操作和普通SQLite数据库一致
内容的提问来源于stack exchange,提问作者Aenaon
相关产品推荐
相关产品推荐

