python子进程:Python程序代码段中调用另一Python程序代码文件(启动子进程)
python子进程:在一段Python程序(python代码段)中调用另一Python程序(python代码文件)
一. 闲言多说
在数据建模的生产部署阶段,有时候为了结果的实时性,我们需要实时调用模型文件进行结果输出。
这里假定一个业务场景:
某py代码片段的目标是进行房价预测,在代码片段中调用“模型预测.py”(作为子进程),根据输入参数由模型代码给出预测房价,当前代码片段获取模型预测输出,对其进行二次处理后生成json格式集返给下游处理环节。
二. 主要function
这里使用Python 标准库里的 subprocess.Popen() 类进行处理。
常用的 os.system、os.spawn*、os.popen*、popen2*、commands.*等模块均可由subprocess模块替代。
subprocess提供了一组启动子进程的方便的标准函数: subprocess.call()等
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
但是由于业务场景的复杂性,这种方便函数有时候不能很好的达到我们的目的,故而推荐使用: subprocess.Popen()
2.1 Popen
Popen class:在新的进程中执行子程序,它提供了比方便函数 subprocess.call()等更高的灵活性,方便覆盖更多的使用情景。
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False