(请注意:有一个问题名为“SQLite3和多处理”,但这个问题实际上是关于多线程处理的,这是公认的答案,这不是重复的)
我正在实现一个多进程脚本,每个进程都需要在sqlite表中写入一些结果。我的程序总是用database is locked崩溃(对于sqlite,一次只允许一个DB修改)。在
以下是我所拥有的一个例子:def scan(n):
n = n + 1 # Some calculation
cur.execute(" \
INSERT INTO hello \
(n) \
VALUES ('"+n+"') \
")
con.commit()
con.close()
return True
if __name__ == '__main__':
pool = Pool(processes=int(sys.argv[1]))
for status in pool.imap_unordered(scan, range(0,9999)):
if status:
print "ok"
pool.close()
我尝试过通过在main中声明一个锁并在scan()中使用它作为全局来使用锁,但是它并没有阻止我得到database is locked。在
确保在多进程Python脚本中同时只发出一个INSERT语句的正确方法是什么?
编辑:
我在基于Debian的Linux上运行。在