我正在做一个很简单的例子,使用'多处理'中的'Pool'并行工作。我想要做的是同时启动许多SQL查询。池多处理失败
我已经激活了WAL模式以允许同时进行多个读/写操作。
def FUNC1():
conn = sqlite3.connect("DB.db")
cur = conn.cursor()
cur.execute(QUERY1)
print "TEST"
cur.close()
conn.close()
return
def FUNC2():
conn = sqlite3.connect("DB.db")
cur = conn.cursor()
cur.execute(QUERY2)
cur.close()
conn.close()
return
if __name__ == '__main__':
conn = sqlite3.connect("DB.db")
cur = conn.cursor()
cur.execute('PRAGMA journal_mode=wal')
pool = Pool(processes=2)
pool.map_async(FUNC1,"")
pool.map_async(FUNC2,"")
cur.close()
conn.close()
终端应该显示一个print:'TEST',它表明程序已经完成了FUNC1操作。问题是它什么都没显示。
有谁知道为什么?
编辑
我已经改变了代码(谢谢你“马塔”!),现在的问题是,没有并行工作。
其实查询需要3秒,执行和如果我通过三次相同的查询最终的时间是9 ...
为什么?
def Query(Query):
conn = sqlite3.connect("DB.db")
cur = conn.cursor()
curOperations.execute(Query)
cur.close()
conn.close()
return
if __name__ == '__main__':
conn = sqlite3.connect("DB.db")
cur = conn.cursor()
cur.execute('PRAGMA journal_mode=wal')
conn.commit()
pool = Pool(processes=2)
pool.map_async(Query,['QUERY1', 'QUERY2', 'QUERY3'])
pool.close()
pool.join()
cur.close()
conn.close()
仅当您使用多个连接时,WAL模式并发才有效。 –
我该如何建立多个连接?我应该将数据库连接到每个FUNC吗? – Ralk
如果你不介意,你能来解决这个[问题](https://stackoverflow.com/questions/45816730/convert-dataframe-columns-to-objects-efficiently)吗? –