由于python 多线程是无法在多核上发挥优势的,所以才用多进程的方式来折中将这个问题解决。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 from multiprocessing import Pool 2 import os 3 def f(x): 4 #打印变量和每个进程的pid这样在显示结果中可以看出是多进程 5 print x,os.getpid() 6 return x*x 7 if __name__ == '__main__': 8 #用pool 方法来生成一个进程池,每次可以执行5个进程 9 p=Pool(5) 10 #这个map函数是 multiprocessing 包装后的并不是自带的map函数 11 print p.map(f,range(5))
显示结果: 如果在windows下运行可能是取pid的方法不行显示pid都是一个,下面是linux测试执行的
0 1191
1 1194
4 1197
2 1195
3 1196
[0, 1, 4, 9, 16]
并行执行
看看下面这个利用Process方式完成多进程创建
#_*_coding:utf-8_*_ from multiprocessing import Process import os,time def info(title): print title print 'module name:',__name__ if hasattr(os,'getppid'): #打印主父进程pid print 'parent process:',os.getppid() #打印当前进程的pid print 'process id:',os.getpid() def f(name): info("subpro") time.sleep(1) print 'subprocess:',name if __name__ == '__main__': info('main process') print '-------------------' for i in range(2): p=Process(target=f,args=(i,)) #fork进程,创建 p.start() p.join()#这样写主要是测试,这样就把进程阻塞主了。真正处理的时候必须写在for外面要不执行方式还是串行 print 11111111 #p.join()
执行结果: