共同点
multiprocessing和subprocess都是对操作系统底层多进程api的封装:
multiprocessing:
- *nix下默认是fork模式,封装了
fork()
- windows下是spawn模式,调用了windows的多进程api
https://docs.python.org/zh-cn/3/library/multiprocessing.html#contexts-and-start-methods
subprocess:
- POSIX 上使用类似于
os.execvpe()
的行为来执行子程序 - Windows 上,该类会使用 Windows
CreateProcess()
函数
https://docs.python.org/zh-cn/3/library/subprocess.html#subprocess.Popen
不同点
multiprocessing创造的进程必须用于执行若干个(若干段)python脚本,它完全类似threading模块,只是是进程级别的
subprocess则创造了简单的普通进程,并提供了完整的与输入、输出、错误流交互的api,可以获取进程的返回码
例子
使用multiprocessing:
- 在一个python程序中做一些工作,为了将工作分派到多个处理器核心上
使用subprocess:
- 在一个python程序中,想执行一些系统命令(ls,git,conda,ipconfig等)
- 编译运行一些别的语言(例如Java或C++)的文件