python 多进程操作

由于python 多线程是无法在多核上发挥优势的,所以才用多进程的方式来折中将这个问题解决。

 

 

 

 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))
View Code

显示结果: 如果在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()

 

执行结果:

 

posted @ 2016-08-25 15:16  MKY-门可意  阅读(510)  评论(0编辑  收藏  举报