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())