2011-07-22 172 views
5

我有一個運行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() 
+1

我們展示您的代碼,所以我們可以看到,當文件被關閉,等 – agf

+0

@agf。謝謝您的幫助。把它放在這裏的基本想法是很長的。 – Ogan

+1

如果發佈的內容太長,您需要將其縮減爲觸發問題的最小代碼,然後發佈該內容。這樣做你甚至可能自己發現問題。 – agf

回答

0

要改變在優勝美地的數量打開文件限制(OS X 10.10):

sudo launchctl limit maxfiles [number-of-files] unlimited