是不是应该调用popen ^_^?

829阅读 1评论2008-12-20 zhucj
分类:

最近一直写Python代码,给项目中C++写的Component调用,如何调用?call一下popen

xxx月xxx日,想到这么个问题:

popen 调用 python 之后,系统会启动一个新进程来run python解析器,这个解析器然后运行python脚本(多了一个进程),如果说python脚本中使用了commands.getstatusoutput(cmd)这个函数,那么系统又生成一个进程来运行“sh -c cmd”(又多了一个进程)

整个process stack graph看起来是这样的:
|----------------|
| C++ Code       |
|----------------|<----|
        |              |
        |              |返回结果
        |              |
|----------------|-----|
| Python         |
|----------------|<----|
        |              |
        |              |返回结果
        |              |
|----------------|-----|
| Shell          |
|----------------|

当然,这还不算很复杂的,如果shell里面再run perl的脚本,那么shell下面又要生成perl解析器进程,process stack就又多了一层。这样做的弊端显而易见,如果中间的某一个进程被kill了或者crash了,那么上层的进程就会连锁反应,一个接着一个得到非0的errorcode,当然output也不可能是期望值了。还有就是,为了完成一个简单的任务,也要启动这么多的进程实在是太浪费了些。另外,创建新进程其实是很费时间的,看一下linux source code就很清楚了,所以上面这种做法只能在时间不敏感的计算任务中使用。

当然,上面这样做也是有好处的,写C++ code的人你就管好C++ code就够了,写python code的人管好python code就够了,反正在popen里面无非就是传递一个字符串。

由于项目实在是太复杂了,所有代码都用C++来写不现实,因此也就一直维持这样的一个做法,虽然这个做法不是很好。
上一篇:胡乱涂鸦
下一篇:使用IPMI工具实现对服务器的远程管理

文章评论