代码之家  ›  专栏  ›  技术社区  ›  dsimcha

jython:subprocess.popen耗尽了文件描述符

  •  4
  • dsimcha  · 技术社区  · 14 年前

    我正在使用Python的Jython2.51实现编写一个脚本,该脚本通过 subprocess.Popen 和用途 PIPE 到管道 stdout stderr 到父进程和 stdin 到子进程。经过几百次循环迭代之后,我似乎用完了文件描述符。

    这个 Python subprocess documentation 除了 close_fds 选项,描述得不太清楚(为什么除了0、1和2之外还应该有文件描述符打开?).I假设在cpython中,引用计数处理资源释放问题。当使用 Popen Jython的目标?

    编辑:为了以防万一,这是一个多线程程序,所以有几个 波彭 进程同时运行。

    1 回复  |  直到 14 年前
        1
  •  3
  •   DNS    14 年前

    这只回答了部分问题,但我的理解是,当您生成一个新进程时,它通常继承父进程的所有句柄。其中包括打开的文件和您正在监听的套接字。

    在UNIX上,这是使用“fork”的副作用,它在加载新的可执行文件之前复制当前进程及其所有句柄。在Windows上,它更显式,但无论如何,Python都会这样做,以尽可能多地匹配跨平台的行为。

    close_fds选项为true时,会在生成子进程后关闭所有继承的句柄,因此新的可执行文件将从干净的石板开始。但是,如果您的子流程一次运行一个,并在完成后终止,那么这不应该是问题所在。