我运行一个创建大量子进程的脚本时,我似乎遇到了Python的问题。子进程创建代码类似于: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] Too many open files
一旦发生错误,我无法创造任何进一步的子处理直到杀死脚本并再次启动它。我想知道下面这一行是否可以负责。
atexit.register(lambda: __kill_proc(proc))
难道是这条线创建了一个子过程的引用,导致“文件”保持打开,直到脚本退出?
你用'proc'做了什么?你调用'communic()'或'wait()'或'terminate()/ kill()'?如果不是,那么很可能就是这样。 – Bakuriu
也可以重写'__kill_proc'来使用进程pid而不是'Popen'实例。通过这种方式,你不会保留引用。试试看看行为是否改变。 – Bakuriu
回应你的第一条评论:通常沟通()/等待()被调用。 回复第二评论:啊,好建议。我会试一试,看看它是否能解决问题。 – torbinsky