【问题标题】:Subprocess - Too many open Files in subprocess子进程 - 子进程中打开的文件太多
【发布时间】:2021-12-14 10:37:25
【问题描述】:

在我的系统上(使用 python3.6.9)我得到了太多打开的文件错误。

我在 python 中执行子进程时遇到错误。

追溯:

File "/opt/KIDICAP/docengine/Objects/Watcher.py", line 99, in watch, self.check_ulimit()
File "/opt/KIDICAP/docengine/Objects/Watcher.py", line 469, in check_ulimit
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
File "/usr/lib/python3.6/subprocess.py", line 729, in __init__    restore_signals, start_new_session)
File "/usr/lib/python3.6/subprocess.py", line 1254, in _execute_child    errpipe_read, errpipe_write = os.pipe()
OSError: [Errno 24] Too many open files

我试图查找它,但永久设置 ulimit 不起作用。

我什至构建了一个函数,在执行子进程之前设置 ulimit。

        process = subprocess.Popen(comand1, shell=True, stdout=subprocess.PIPE)
        output = process.stdout.readlines()
        process.stdout.close()
        process.terminate()
        # print(output)

        # logger.info(comand2)
        process = subprocess.Popen(comand2, shell=True, stdout=subprocess.PIPE)
        output = process.stdout.readlines()
        process.stdout.close()
        process.terminate()
        # print(output)

        # logger.info(comand3)
        process = subprocess.Popen(comand3, shell=True, stdout=subprocess.PIPE)
        output = process.stdout.readlines()
        process.stdout.close()
        process.terminate()

【问题讨论】:

  • 请告诉我们您的问题到底是什么。您想知道如何查找“打开的文件过多”错误的原因或如何提高限​​制吗? (当然,我不知道你的申请,但总的来说限制是有意义的,除非非常特殊的情况,否则不应增加。)
  • 我想发布一个带有该错误的帖子。并回答我自己。因为我找了很久才找到自己的解决方案。

标签: python python-3.x linux error-handling subprocess


【解决方案1】:

我在 Internet 上没有找到合适的解决方案。

我的解决方案是编辑 fs.file max (/proc/sys/fs/file-max)

我将文件中的值放在 1000000 上。

并编辑 bash.bashrc 文件以在每个打开的会话中增加 ulimit。

/etc/bash.bashrc

我补充说:

ulimit -n 1000000
ulimit -s unlimited

【讨论】:

  • 找出打开所有文件的原因不是更好吗?您是否也有 1000000 个挂起的进程?
  • 是的会更好。我在线程中运行函数。每个线程打开 3 个子进程。我使用 exiftool 来处理 pdf 文件。我一次启动 15 个进程(一个进程依次处理 10 个文件)来压缩文件。有时需要处理超过 100000 个 pdf 文档。我还没有找到从 exiftool 关闭文件的解决方案。
猜你喜欢
  • 2013-05-07
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2011-09-07
  • 1970-01-01
相关资源
最近更新 更多