子进程 - 子进程中打开的文件太多

Subprocess - Too many open Files in subprocess

在我的系统上(使用 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()

在网上没有找到合适的解决方法。

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

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

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

/etc/bash.bashrc

我补充说:

ulimit -n 1000000
ulimit -s unlimited