进程池同步异步

时间:2022-10-02 14:58:44
from multiprocessing import Pool
import os,time
def work(n):
    print('%s run'%os.getpid())
    time.sleep(3)
    return n**2
# if __name__=='__main__':
#     p=Pool(3)
#     res_list=[]
#     for i in range(10):
#         res=p.apply(work,args=(i,))  同步调用
#         res_list.append(res)
#     print(res_list)      #直接得到结果

if __name__=='__main__':
    p=Pool(3)
    res_list=[]
    for i in range(10):
        res=p.apply_async(work,args=(i,))
        res_list.append(res)
    p.close()   #不会再去执行新的程序
    p.join()       #等待进程池的进程执行完毕,主进程结束,进程池可能还没来得及执行,也就跟着一起结束了
    print(res_list)
    for i in res_list:
        print(i.get()) #使用get来获取apply_aync的结果,如果是apply,
        # 则没有get方法,因为apply是同步执行,立刻获取结果,也根本无需get