当我运行创建大量子进程的脚本时,我似乎遇到了 Python 问题。子流程创建代码类似于:
代码:
def execute(cmd, stdout=None, stderr=subprocess.STDOUT, cwd=None):
proc = subprocess.Popen(cmd, shell=True, stdout=stdout, stderr=stderr, cwd=cwd)
atexit.register(lambda: __kill_proc(proc))
return proc
我收到的错误消息是:
OSError: [Errno 24] 打开的文件太多
一旦发生此错误,我将无法创建任何进一步的子进程,直到终止脚本并重新启动它。我想知道以下行是否负责。
atexit.register(lambda: __kill_proc(proc))
可能是这一行创建了对子进程的引用,导致“文件”保持打开状态,直到脚本退出?