map与apply区别

1. 使用map方法

 

Python代码   收藏代码
  1. import multiprocessing  
  2. import time  
  3.   
  4. def f(x):  
  5.     time.sleep(2)  
  6.     print x  
  7.   
  8. if __name__ == '__main__':   
  9.   pool = multiprocessing.Pool(processes=5)   
  10.   pool.map(f, xrange(10))  
  •  并发5个进程
  • map方法会依次将参数二数组每个元素传入参数1方法中
  • 如果将map()替换为map_async(),则方法不会阻塞,而是直接执行main进程后面的代码,所以要配合pool.close()和pool.join()一起使用。close()方法是使pool不再接受新任务;join()方法是阻塞main进程等待子进程执行完成才可以运行后面code

2. 使用apply方法

 

 

Python代码   收藏代码
  1. import multiprocessing  
  2. import time  
  3.    
  4. def func(msg):  
  5.     print msg  
  6.     time.sleep(1)  
  7.    
  8. if __name__ == "__main__":  
  9.     print 'start main-process'  
  10.     pool = multiprocessing.Pool(processes=4)  
  11.     for i in xrange(10):  
  12.         msg = "hello %d" %(i)  
  13.         pool.apply_async(func, (msg, ))  
  14.     pool.close()  
  15.     pool.join()  
  16.     print "Sub-process(es) done."  
  17.     print 'Main-process done.'  

 

  •  apply_async和apply方法区别是前者不会阻塞main进程,需要用pool.close()和join()方法阻塞等待子进程执行。
  • apply与map方法相比,它只是调用方法和参数,而map方法会将数组参数迭代传给被调用方法
  • pool.apply_async(func, (msg, )) 这行msg后面的逗号是不能省略的,否则不会执行func方法

--end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值