gpt4 book ai didi

python - Jython:subprocess.Popen 用完文件描述符

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:53 26 4
gpt4 key购买 nike

我正在使用 Python 的 Jython 2.51 实现来编写一个脚本,该脚本通过 subprocess.Popen 重复调用另一个进程,并使用 PIPE 来传输 stdoutstderr 到父进程, stdin 到子进程。在数百次循环迭代之后,我似乎用完了文件描述符。

Python subprocess documentation除了 close_fds 选项外,很少提及释放文件描述符,该选项描述得不是很清楚(为什么首先要打开 0、1 和 2 之外的任何文件描述符?)。我假设在 CPython 中,引用计数会处理资源释放问题。在 Jython 中使用 Popen 对象时确保释放所有描述符的正确方法是什么?

编辑:以防万一,这是一个多线程程序,因此有多个 Popen 进程同时运行。

最佳答案

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

在 UNIX 上,这是使用“fork”的副作用,它会在加载新的可执行文件之前复制当前进程及其所有句柄。在 Windows 上它更明确,但 Python 仍然这样做,以尝试尽可能跨平台匹配行为。

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

关于python - Jython:subprocess.Popen 用完文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com