子进程 - 子进程中打开的文件太多
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
在我的系统上(使用 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