最近一直写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) |