我正在做一個很簡單的例子,使用'多處理'中的'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)嗎? –