我在我想處理的數據庫中有許多記錄。基本上,我想運行幾個正則表達式替換文本字符串行的標記,並在最後,並將它們寫回數據庫。關於python multiprocessing的初學者問題?
我想知道多處理是否會加快完成這些任務所需的時間。 我做了
multiprocessing.cpu_count
,並返回8.我已經試過類似
process = []
for i in range(4):
if i == 3:
limit = resultsSize - (3 * division)
else:
limit = division
#limit and offset indicates the subset of records the function would fetch in the db
p = Process(target=sub_table.processR,args=(limit,offset,i,))
p.start()
process.append(p)
offset += division + 1
for po in process:
po.join()
但顯然,所花費的時間比運行所需的時間更高一個單一的線程。這是爲什麼?有人可以請指教這是一個合適的情況下,或者我在這裏做錯了什麼?
你真的用4次迭代來測試它嗎?產生每個過程需要時間。另外,postgresql每個連接只使用一個cpu。所以它可能只是排隊4個查詢並按順序運行它們。另外,根據啓動每個查詢的開銷,拆分工作可能無益。另外,還有一些東西只依賴於你的系統,比如後臺進程和你正在運行的硬件。 – 2010-11-23 02:33:09
@nate,我用4測試它。我認爲我每個進程使用1個連接,但.. – goh 2010-11-23 04:38:37