一篇文章搞定Python多进程(全)
1.Python多进程模块
Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Process对象来创建一个进程对象。这个进程对象的方法和线程对象的方法差不多也有start(), run(), join()等方法,其中有一个方法不同Thread线程对象中的守护线程方法是setDeamon,而Process进程对象的守护进程是通过设置daemon属性来完成的。
下面说说Python多进程的实现方法,和多线程类似
2.Python多进程实现方法一
from multiprocessing import Process def fun1(name): print('测试%s多进程' %name) if __name__ == '__main__': process_list = [] for i in range(5): #开启5个子进程执行fun1函数 p = Process(target=fun1,args=('Python',)) #实例化进程对象 p.start() process_list.append(p) for i in process_list: p.join() print('结束测试')
结果
测试Python多进程 测试Python多进程 测试Python多进程 测试Python多进程 测试Python多进程 结束测试 Process finished with exit code 0
上面的代码开启了5个子进程去执行函数,我们可以观察结果,是同时打印的,这里实现了真正的并行操作,就是多个CPU同时执行任务。我们知道进程是python中最小的资源分配单元,也就是进程中间的数据,内存是不共享的,每启动一个进程,都要独立分配资源和拷贝访问的数据,所以进程的启动和销毁的代价是比较大了,所以在实际中使用多进程,要根据服务器的配置来设定。
3.Python多进程实现方法二
还记得python多线程的第二种实现方法吗?是通过类继承的方法来实现的,python多进程的第二种实现方式也是一样的
from multiprocessing import Process class MyProcess(Process): #继承Process类 def __init__(self,name): super(MyProcess,self).__init__() self.name = name def run(self): print('测试%s多进程' % self.name) if __name__ == '__main__': process_list = [] for i in range(5): #开启5个子进程执行fun1函数 p = MyProcess('Python') #实例化进程对象 p.start() process_list.append(p) for i in process_list: p.join() print('结束测试')
结果