Как разделить:memory: базу данных между различными процессами в python, используя пакет python sqlite3

Сценарий показан ниже: у меня есть много процессов, которые выполняют работу с привязкой к процессору и читают только в одной и той же базе данных, я знаю, что ключевые слова кеша и uri могут использоваться для sqlite для совместного использования кеша базы данных между потоками, но как насчет процессов? лучше быть доступным как для 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)

1 ответ

Решение

Это невозможно. Весь смысл процессов заключается в том, чтобы изолировать их память друг от друга. (Большинство ОС допускают совместную память, но для этого нет переносимого механизма.)

Даже если бы это было возможно, это не было бы быстрее, потому что как SQLite, так и операционная система кэшировали данные.

Другие вопросы по тегам