Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88853
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:38
文章分类
文章存档

2009年(12)

2008年(19)

我的朋友

分类:

2008-12-20 09:51:53

最近一直写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++来写不现实,因此也就一直维持这样的一个做法,虽然这个做法不是很好。
阅读(817) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-12-20 09:58:13

字符型的图不容易对齐啊