进程池Pool

进程池Pool

方法:

Pool(processes = 0):创建进程池对象。processes是可选参数,设置进程池的进程数量。

apply_async(function, *args, **kwargs):异步的方式添加进程事件。

  使用方法同Process函数,function是目标函数,*args是星号元组形参,**kwargs是星号字典形参。

close():关闭进程添加事件的通道。有些地方说是关闭进程池,本人不这么认为,因为close后,不论是父进程还是子进程都仍然在继续执行,直到所有进程运行完毕。

join():阻塞函数,等待进程池的进程执行完毕。代码里必须添加这个,否则父进程结束,子进程也会中断。

get():进程池可以有返回值,通过该方法获取返回值。

 

示例1,没有返回值的:

from multiprocessing import Pool
import time

def work(msg):
    time.sleep(5)
    print(msg)

if __name__=="__main__":
    p = Pool(processes = 4)
    for x in range(0,10):
        msg = "this is {0} time".format(x)
        #msg = "this is %d time" %x
        print(x)
        p.apply_async(work, (msg,))
        
    p.close()#关闭父进程添加事件的通道
    p.join()#必须加这个,否则父进程结束,子进程都会中断
    
    print("main end")

 

示例2,有返回值的:

from multiprocessing import Process
from multiprocessing import Pool
from time import sleep

def work(x):
    res = "this is result:%d" %x
    return res
    
if __name__=="__main__":
    result = list()
    for x in range(0, 10):
        p = Pool(processes = 4)
        result.append(p.apply_async(work, (x,)))

    p.close()
    p.join()
    for x in result:
        print("here is jieshou:", x.get())    
    print("main end")
    

 

posted @ 2019-01-24 11:21  雨行渡  阅读(480)  评论(0编辑  收藏  举报