multiprocessing模块
Python中提供了multiprocessing模块来实现进程并发编程,官方文档如下:
由于GIL锁的存在,所以CPython中多线程是不能够并行运行的,但是多进程可以并行运行,该模块用到的地方基本很少,但是仍然需要进行掌握。
此外,它和threading模块99%的接口都一模一样,只有少量的差别。
添加子进程
针对不同平台选择添加子进程的方式
multiprocessing模块针对不同的平台,添加子进程的方式也有所区别:
- spawn:该方式是Windows平台下的默认方式,它会创建一个新的解释器进程,速度比较慢
- fork:该方式是Unix平台下的默认方式,内部会通过os.fork()产生一个新的解释器分叉
需要注意的是,如果平台是Windows,则必须将启动代码书写到if __name__ == "__main__”语句的下面,否则将会抛出异常。
如何指定新进程的启动方式?示例如下:
import multiprocessing
if __name__ == "__main__":
multiprocessing.set_start_method("fork")
实例化Process类
使用该方式新增子线程任务是比较常见的,也是推荐使用的。
简单的代码示例如下,创建3个子进程并向其添加任务,然后运行并打印它们的PID和进程名字:
import multiprocessing
import time
def task(params):
print("sub process run")
currentThread = multiprocessing.current_process()
time.sleep(3)
print("current subProcess id : %s\ncurrent sub process name : %s\ncurrent sub process params : %s" % (
currentThread.ident, currentThread.name, params))