Python_多进程_pool进程池

多进程典型案例:

 

1、将子进程的进程名作为列表中的元素,在父进程中遍历(异步)执行

#coding: utf-8
from multiprocessing import Pool
import os, time, random
#将函数打包成列表中的元素,再(异步)遍历执行

def zhangsan():
    print ("\nRun task 张三-%s" %(os.getpid())) #os.getpid()获取当前的进程的ID
    start = time.time()
    time.sleep(random.random() * 10) #random.random()随机生成0-1之间的小数
    end = time.time()
    print ('Task 张三 runs %0.2f seconds.' %(end - start))

def lisi():
    print ("\nRun task 李四-%s" %(os.getpid()))
    start = time.time()
    time.sleep(random.random() * 40)
    end=time.time()
    print ('Task 李四 runs %0.2f seconds.' %(end - start))

def wangwu():
    print ("\nRun task 王五-%s" %(os.getpid()))
    start = time.time()
    time.sleep(random.random() * 30)
    end = time.time()
    print ('Task 王五 runs %0.2f seconds.' %(end - start))

def zhaoliu():
    print ("\nRun task 赵六-%s" %(os.getpid()))
    start = time.time()
    time.sleep(random.random() * 20)
    end = time.time()
    print ('Task 赵六 runs %0.2f seconds.' %(end - start))
        
if __name__=='__main__':
    function_list=  [zhangsan, lisi, wangwu, zhaoliu] 
    print ("parent process %s" %(os.getpid()))

    pool=Pool(4)
    for func in function_list:
        pool.apply_async(func)     #Pool执行函数,apply执行函数,当有一个进程执行完毕后,会添加一个新的进程到pool中

    print ('等待所有子进程执行……')
    pool.close()
    '''
    调用join之前,一定要先调用close() 函数,否则会出错,
    close()执行后不会有新的进程加入到pool,join函数等待素有子进程结束
    '''
    pool.join()    
    print ('子进程执行完毕')

 

posted @ 2018-01-02 18:41  Leq123  阅读(196)  评论(0编辑  收藏  举报