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

标签 python file macos

我有一个运行 multiprocessing.Pool 的 python 脚本来分别处理大量文件。我通常有一个 8 的 cpu 限制。我的问题是在运行一段时间后我总是得到“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()

最佳答案

您可能受到操作系统打开文件限制的限制。参见 How do I change the number of open files limit in Linux?想要查询更多的信息。我个人更喜欢更改/etc/security/limits.conf 设置。

关于python - 使用 multiprocessing.Pool 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790928/

相关文章:

python - JAX vmap 行为

python - 如何将列表中的值输入到字符串中?

Xcode 10 存档到 'Other Items' 而不是 'MacOS Apps'

java - 本地主机未解析为 127.0.0.1

cocoa - 为 Mac 开发文本编辑工具的简单方法?

python - 使用 python 连接到域以确定服务器是否在线

python - python中非英语推文的情感分析

c - 从字符串错误中提取字符

Java 文件到二进制的转换

file - 加载所需文件,相对路径与绝对路径