ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-30 23:43:29  阅读:262  来源: 互联网

标签:python file-io resources popen jython


我正在使用Python的Jython 2.51实现来编写一个脚本,该脚本通过subprocess.Popen重复调用另一个进程,并使用PIPE将stdout和stderr传递给父进程,并将stdin传递给子进程.经过几百次循环迭代后,我似乎用完了文件描述符.

除了close_fds选项之外,Python subprocess documentation没有提及释放文件描述符的问题,这个描述没有得到很清楚的描述(为什么除了0,1和2之外还有任何文件描述符在开头?).我假设在CPython中,引用计数负责资源释放问题.当在Jython中使用Popen对象完成时,确保所有描述符都被释放的正确方法是什么?

编辑:以防它有所不同,这是一个多线程程序,因此有几个Popen进程同时运行.

解决方法:

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

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

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

标签:python,file-io,resources,popen,jython
来源: https://codeday.me/bug/20190630/1341398.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有