【问题标题】:Multiprocessing causing OSError: [Errno 24] Too many open files error多处理导致 OSError: [Errno 24] Too many open files 错误
【发布时间】:2021-08-04 18:25:04
【问题描述】:

我在使用 multiprocessing.Pool 时收到 OSError: [Errno 24] Too many open files 错误。 export 函数连接到数据库,将数据导出到文件中,上传到 S3,然后从文件系统中删除文件。

with Pool() as pool:
    results = pool.map(export, work, 1)

for result in results:
    logger.info(result)

任何想法为什么会发生这种情况?

【问题讨论】:

  • 没有看到你的工作代码就不可能回答这个问题。你在某处留下文件、数据库连接、网络连接或类似的东西打开,最终你会遇到每个进程的操作系统硬限制。一旦不再需要它们,请尝试关闭所有句柄,并确保退出工作函数时没有任何东西打开。

标签: python multiprocessing


【解决方案1】:

您看到的错误是因为打开的文件描述符过多(这些可能是打开的文件句柄或打开的套接字),或者可能是由未正确处理的工作人员引起的。为了查看这些限制是什么,您可以使用 ulimit:

$ ulimit -Hn
1048576
$ ulimit -Sn
1024

或者有超过 100 万的硬限制,但只要打开 1024 个文件,进程就会收到 Errno 24 (EMFILE)。最合乎逻辑的解决方案是您必须打开许多文件,并且在完成它们后应该立即关闭它们,如果不是这种情况,您也可以(暂时)通过调用来修改软限制(下面的示例加倍限制):

$ ulimit -n 2048

这篇文章解释了潜在的错误并提供了更多背景信息:Difference between Linux errno 23 and Linux errno 24

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2021-09-07
    • 2017-02-18
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多