Python 使用multiprocessing.Pool打开的文件太多

Python 使用multiprocessing.Pool打开的文件太多,python,file,macos,Python,File,Macos,我有一个python脚本,它运行multiprocessing.Pool来分别处理很多文件。我通常有8个cpu限制。我的问题是,运行一段时间后,我总是会遇到“IOError:[Errno 24]打开的文件太多”。每个子进程都会使用file.open()打开几个仅用于读取的文件。然后将这些文件处理程序传递给多个函数以检索数据。在每个子进程结束时,这些文件将使用file.close()关闭。我也尝试了这个声明,但没有解决这个问题。有人知道出了什么问题吗。我搜索了一下,但没有找到任何答案。我正在关闭文

我有一个python脚本,它运行multiprocessing.Pool来分别处理很多文件。我通常有8个cpu限制。我的问题是,运行一段时间后,我总是会遇到“IOError:[Errno 24]打开的文件太多”。每个子进程都会使用file.open()打开几个仅用于读取的文件。然后将这些文件处理程序传递给多个函数以检索数据。在每个子进程结束时,这些文件将使用file.close()关闭。我也尝试了这个声明,但没有解决这个问题。有人知道出了什么问题吗。我搜索了一下,但没有找到任何答案。我正在关闭文件,并且函数正在正确返回,所以是什么让文件处理程序保持不变

我的设置是Mac10.5和Python2.6

谢谢

奥根


您可能受到操作系统打开文件限制的限制。有关更多信息,请参阅。我个人更喜欢更改/etc/security/limits.conf设置

要更改Yosemite(OS X 10.10)中打开的文件数限制:


向我们显示您的代码,以便我们可以查看文件何时关闭等@agf。谢谢你的帮助。把它放在这里是很长的一段时间。如果它太长而不能发布,你需要把它减少到最少的代码来触发问题,然后发布它。在这样做时,您甚至可能自己发现问题。看起来您只有两个文件。。。是通过多个过程向他们写信,还是仅仅阅读?如果有多个进程写入同一个文件,而文件周围没有保护,那么肯定会出现ioerror
    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()
sudo launchctl limit maxfiles [number-of-files] unlimited