You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Python 3.8如何跨进程共享内存式SQLite数据库?

跨进程共享内存式SQLite数据库的实现方案
  • 核心结论:跨进程共享内存式SQLite是可行的,但同一进程内使用的cache=shared URI模式无法直接跨进程复用——该模式的内存数据库仅存在于单个进程的私有内存空间,不同进程无法直接访问。

Windows系统(Python 3.8)实现方法

Windows下可通过两种方式实现跨进程内存共享:

  1. 内存映射文件方式
    创建命名内存映射文件作为SQLite的存储介质,不同进程通过打开同一个映射文件共享数据库:
    进程1(创建并初始化数据库):
    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()
    
    进程2(读取共享数据库):
    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()
    
  2. 虚拟内存磁盘方式
    借助第三方RamDisk工具创建内存虚拟磁盘,将SQLite数据库文件放在该磁盘上,不同进程直接连接磁盘上的数据库文件即可,数据仅存于内存中,操作逻辑和普通文件数据库一致。

Linux系统实现方法

Linux下可直接挂载tmpfs(内存文件系统),将SQLite数据库放在挂载点下实现内存级跨进程共享:

  1. 挂载tmpfs:
    sudo mount -t tmpfs -o size=10M tmpfs /mnt/sqlite_mem
    
  2. 进程连接该目录下的数据库:
    import sqlite3
    conn = sqlite3.connect("/mnt/sqlite_mem/shared.db")
    # 后续操作和普通SQLite数据库一致
    

内容的提问来源于stack exchange,提问作者Aenaon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:05:22