我有一个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()
运行它只打印一个'打开的连接',因为子进程无法打开它。
如果我在主进程中注释连接线,子进程将成功打开文件。
发生了什么事?
答案 0 :(得分:0)
好的,所以我跟踪了mac OSX坏sqlite库的问题。
网上有很多关于使用最新捆绑OSX sqlite库的崩溃/段错误的评论。
我所做的是使用自制软件安装原始sqlite,并安装了一个新的python,其中包含指向原始sqlite的链接。 这似乎解决了这个问题。