我有一個運行multiprocessing.Pool的python腳本,可以分別處理大量文件。我通常有一個CPU限制爲8.我的問題是運行一段時間後,我總是得到「IOError:[Errno 24]太多打開的文件」。每個子進程都會打開幾個文件,只用file.open()進行讀取。這些文件處理程序比傳遞給多個函數來檢索數據。在每個子進程結束時,這些文件都用file.close()關閉。我也嘗試了with聲明,但沒有解決問題。有沒有人知道什麼是錯的。我搜索了一下,但沒有找到任何答案。我正在關閉這些文件,並且函數正常返回,所以文件處理程序保持了周圍的狀態。打開多處理文件太多。池
我設置的Mac 10.5與Python 2.6
感謝
奧根
from custom import func1, func2
# func1 and func2 only seek, read and return values form the file
# however, they do not close the file
import multiprocessing
def Worker(*args):
f1 = open("db1.txt")
f2 = open("db2.txt")
for each in args[1]:
# do many stuff
X = func1(f1)
Y = func2(f2)
f1.close()
f2.close()
return
Data = {1:[2], 2:[3]}
JobP= multiprocessing.Pool(8)
jobP.map_async(Worker, Data.items())
jobP.close()
jobP.join()
我們展示您的代碼,所以我們可以看到,當文件被關閉,等 – agf
@agf。謝謝您的幫助。把它放在這裏的基本想法是很長的。 – Ogan
如果發佈的內容太長,您需要將其縮減爲觸發問題的最小代碼,然後發佈該內容。這樣做你甚至可能自己發現問題。 – agf