Как разделить: memory: базу данных между различными процессами в python, используя пакет python sqlite3 - PullRequest
0 голосов
/ 01 июля 2018
Сценарий

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

0 голосов
/ 01 июля 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...