kobeyan的专栏

Python 多进程中使用pool,pool中指定每次运行几个进程,当其中一个进程结束完毕后,会加入新的进程

#!/usr/bin/env python#coding: utf-8import multiprocessingimport os,time,randomdef Lee():print "Run task Lee-%s" %(os.getpid()) #os.getpid()获取当前的进程的IDstart=time.time()time.sleep(random.random()*10) #random.random()随机生成0-1之间的小数end=time.time()print 'Task Lee, runs %0.2f seconds.' %(end – start)def Marlon():print "Run task Marlon-%s" %(os.getpid())start=time.time()time.sleep(random.random()*40)end=time.time()print 'Task Marlon runs %0.2f seconds.' %(end – start)def Allen():print "Run task Allen-%s" %(os.getpid())start=time.time()time.sleep(random.random()*30)end=time.time()print 'Task Allen runs %0.2f seconds.' %(end – start)def Frank():print "Run task Frank-%s" %(os.getpid())start=time.time()time.sleep(random.random()*20)end=time.time()print 'Task Frank runs %0.2f seconds.' %(end – start)if __name__=='__main__':function_list= [Lee,Marlon,Allen,Frank]print "parent process %s" %(os.getpid())pool=multiprocessing.Pool(2)for func in function_list:pool.apply_async(func) #Pool执行函数,apply执行函数,当有一个进程执行完毕后,会添加一个新的进程到pool中print 'Waiting for all subprocesses done…'pool.close()pool.join() #调用join之前,一定要先调用close() 函数,,否则会出错, close()执行后不会有新的进程加入到pool,join函数等待素有子进程结束print 'All subprocesses done.'

若不给自己设限,则人生中就没有限制你发挥的藩篱。

kobeyan的专栏

相关文章:

你感兴趣的文章:

标签云: