首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python 使用subprocess.Popen步骤创建子进程后子进程不结束

2013-09-28 
python 使用subprocess.Popen方法创建子进程后子进程不结束首先,运行环境是Linux有两个脚本a.py和b.py在a.

python 使用subprocess.Popen方法创建子进程后子进程不结束
首先,运行环境是Linux

有两个脚本a.py和b.py
在a.py中使用如下语句调用b.py

p = subprocess.Popen(['/usr/bin/python', 'b.py'], stdout=subprocess.PIPE)

如果开启了子进程后a.py中没使用p.wait()来等待子进程结束,而是使用命令行:
ps -ef | grep python | grep b.py | grep -v grep | wc -l
来检查进程是否结束

请问,在这种情况下出现了当b.py运行时间过长(半小时以上)时,它不会正常结束掉,导致a.py一直挂起无法结束,是什么原因呢?

subprocess.Popen 子进程不结束
[解决办法]
如果子进程输出很多数据,调用communicate()等待,或者先前定向到一个文件,若不处理时间久了可能缓存塞满了卡住...
[解决办法]
如果你用了 stdout=subprocess.PIPE,就用communicate() 释放缓存,wait反而不重要


[解决办法]
引用:
Quote: 引用:

看看回帖大多是“如果...”,“应该...”。一共有a,b两个文件,看起来都不复杂,为什么不直接贴出代码?避免大家猜来猜去。


辛苦大家了,但是代码是公司的业务代码,不好上传的,见谅。

做一个与公司业务无关的测试代码。把有问题的代码孤立出来的过程,也是在debug。比如如你所说,b.py只是sleep就会出问题,就已经把b简化到和公司业务无关了。a.py中启动b的代码有了,只差循环调用ps的部分了,这也应该是业务无关的。
[解决办法]
引用:
如果子进程输出很多数据,调用communicate()等待,或者先前定向到一个文件,若不处理时间久了可能缓存塞满了卡住...


+1
楼主需要的是这个.

热点排行