2011-07-22 27 views
5

Tôi có một tập lệnh python chạy đa xử lý.Pool để xử lý nhiều tệp riêng biệt. Tôi thường có một giới hạn CPU của 8. Vấn đề của tôi là sau khi chạy một thời gian tôi luôn luôn nhận được "IOError: [Errno 24] Quá nhiều tập tin mở". Mỗi tiến trình con sẽ mở ra một vài tệp để chỉ đọc với tệp.open(). Các trình xử lý tệp này được truyền cho nhiều hàm để truy xuất dữ liệu. Vào cuối mỗi tiến trình con, các tệp này được đóng bằng tệp.close(). Tôi đã cố gắng với tuyên bố là tốt nhưng không khắc phục được vấn đề. Có ai có bất kỳ ý tưởng whats sai. Tôi googled xung quanh nhưng không tìm thấy bất kỳ câu trả lời. Tôi đóng các tập tin và các chức năng đang trở lại đúng cách để giữ các tập tin xử lý xung quanh.Quá nhiều tệp đang mở với đa xử lý.Pool

thiết lập của tôi là Mac 10,5 với python 2,6

Cảm ơn

Ogan

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

Hiện chúng tôi mã của bạn vì vậy chúng tôi có thể nhìn thấy khi các tập tin được đóng lại, vv – agf

+0

@agf. Cảm ơn đã giúp đỡ. Nó là rất dài để đặt nó ở đây ý tưởng cơ bản. – Ogan

+1

Nếu quá dài để đăng, bạn cần phải cắt giảm xuống mã tối thiểu để kích hoạt sự cố, sau đó đăng sự cố đó. Làm như vậy bạn thậm chí có thể tự tìm ra vấn đề. – agf

Trả lời

0

Để thay đổi giới hạn số mở tập tin trong Yosemite (OS X 10.10):

sudo launchctl limit maxfiles [number-of-files] unlimited 
Các vấn đề liên quan