使用python多处理打开多个sqlite3连接

时间:2016-11-29 11:48:26

标签: python sqlite multiprocessing

我有一个DB文件并试图从多个进程(不一定是并发)打开它的连接。

我所看到的是,如果从主进程打开数据库,即使连接已关闭,子进程也无法打开相同的数据库。

我创建了一个小例子来说明这一点:

import sqlite3
import multiprocessing

DB='cache.sqlite'

def connect():
    conn=sqlite3.connect(DB, check_same_thread=False, detect_types=sqlite3.PARSE_DECLTYPES,timeout=1)
    print 'Opened connection'
    conn.commit()
    conn.close()

connect()
multiprocessing.Process(target=connect, args=()).start()

运行它只打印一个'打开的连接',因为子进程无法打开它。

如果我在主进程中注释连接线,子进程将成功打开文件。

发生了什么事?

1 个答案:

答案 0 :(得分:0)

好的,所以我跟踪了mac OSX坏sqlite库的问题。

网上有很多关于使用最新捆绑OSX sqlite库的崩溃/段错误的评论。

我所做的是使用自制软件安装原始sqlite,并安装了一个新的python,其中包含指向原始sqlite的链接。 这似乎解决了这个问题。