如何使用python sqlite3包在python中的不同进程之间共享:内存:数据库

如何使用python sqlite3包在python中的不同进程之间共享:内存:数据库,python,sqlite,memory,share,apsw,Python,Sqlite,Memory,Share,Apsw,场景如下所示,我有许多进程在同一个数据库上执行CPU绑定工作和只读,我知道sqlite可以使用cache和uri关键字在线程之间共享数据库缓存,但进程之间如何?最好同时适用于linux和windows,谢谢 def run(self): self.phyconn = apsw.Connection(self.fileName) self.memconn = apsw.Connection(":memory:") try:#backup.__exit__() just ma

场景如下所示,我有许多进程在同一个数据库上执行CPU绑定工作和只读,我知道sqlite可以使用cache和uri关键字在线程之间共享数据库缓存,但进程之间如何?最好同时适用于linux和windows,谢谢

def run(self):
    self.phyconn = apsw.Connection(self.fileName)
    self.memconn = apsw.Connection(":memory:")
    try:#backup.__exit__() just make sure copy if finished,not close backup,so with is good,memconn is still exist when out
        with self.memconn.backup("main", self.phyconn, "main") as backup:
            # call with 0 to get the total pages
            backup.step(0)
            total = backup.pagecount

            stepped = 0
            one_percent = total if total < 100 else total // 100
            last_percentage = 0
            while stepped <= total:
                if self.cancel:
                    #self.progressCanceled.emit()
                    self.memconn=None
                    return
                backup.step(one_percent)
                stepped = stepped + one_percent
                stepped_percentage = stepped*100//total
                if stepped_percentage != last_percentage:
                    last_percentage = stepped_percentage
                    #self.progressChanged.emit(stepped_percentage)
                    websocket.UpdateLoadDBProgress(stepped_percentage,self.sid)
def运行(自):
self.phyconn=apsw.Connection(self.fileName)
self.memconn=apsw.Connection(“:memory:”)
尝试:#备份。uu退出uuu()只要确保复制完成,而不是关闭备份,这样就可以了,退出时memconn仍然存在
使用self.memconn.backup(“main”,self.phyconn,“main”)作为备份:
#使用0调用以获取总页数
备份。步骤(0)
总计=backup.pagecount
步进=0
百分之一=如果总数<100,则总数=100
最后百分比=0
当步进时,这是不可能的。
if进程的整个要点是将它们的内存彼此隔离。
(大多数操作系统允许共享内存,但没有可移植的机制。)


即使有可能,也不会更快,因为SQLite和操作系统都会缓存数据。

您试图解决的实际问题是什么?为什么不能使用DB文件?让多个进程同时读取DB而不是写入,所以我认为如果它可以加载到内存中,让每个进程共享它以提高io效率,即使sqlite缓存数据,不是每个连接都可以吗?操作系统不知道你是否只是读取,所以当进程不同时,每个连接必须有一个副本。在搜索之后,似乎mmap with vfs是唯一的方法,但是没有看到sqliteSQLite的每连接缓存上默认为2MB的任何lib实现。操作系统当然知道你做了什么访问。