map方法
1 from multiprocessing import Pool 2 import time 3 4 def func(i): 5 time.sleep(1) 6 i += 1 7 print(i) 8 9 if __name__ == '__main__': 10 p = Pool(5) 11 p.map(func,range(20)) #需要传函数名和一个可迭代对象 12 p.close() #关闭进程池,不允许在添加新任务 13 p.join() #等待进程池全部任务执行结束 14 print('结束')
apply方法,提交任务为同步,不常用
1 from multiprocessing import Pool 2 import time 3 def func(i): 4 time.sleep(1) 5 i += 1 6 print(i) 7 8 if __name__ == '__main__': 9 p = Pool(5) 10 for i in range(20): 11 p.apply(func,args=(i,)) 12 p.close() #关闭进程池,不允许在添加新任务 13 p.join() #等待进程池全部任务执行结束
apply_async方法
与apply方法使用方法一样,但提交任务为异步,
且与Process不同,apply_async与主进程也异步,即主进程执行完毕就结束了,不会等子进程结束
若想与主进程同步,需要使用join方法
1 from multiprocessing import Pool 2 import time 3 def func(i): 4 time.sleep(1) 5 i += 1 6 print(i) 7 8 if __name__ == '__main__': 9 p = Pool(5) 10 for i in range(20): 11 p.apply_async(func,args=(i,)) 12 p.close() #关闭进程池,不允许在添加新任务 13 p.join() #等待进程池全部任务执行结束
apply_async方法有返回值,返回的结果是个对象,需要通过get方法取到最终的值
1 from multiprocessing import Pool 2 import time 3 def func(i): 4 time.sleep(1) 5 i += 1 6 return i 7 8 if __name__ == '__main__': 9 p = Pool(5) 10 ret_l = [] 11 for i in range(20): 12 ret = p.apply_async(func,args=(i,)) #返回的结果是个对象 13 ret_l.append(ret) 14 p.close() #关闭进程池,不允许在添加新任务 15 p.join() #等待进程池全部任务执行结束 16 for ret in ret_l: 17 print(ret.get())