1.4 map实现并行处理方法

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

介绍:Map

Map是一个很棒的小功能,同时它也是Python并行代码快速运行的关键。给不熟悉的人讲解一下吧,map是从函数语言Lisp来的。map函数能够按序映射出另一个函数。例如

2 results = map(urllib2.urlopen, urls)

这里调用urlopen方法来把调用结果全部按序返回并存储到一个列表里。就像:

1 results = []
2 for url in urls:
3     results.append(urllib2.urlopen(url))

Map按序处理这些迭代。调用这个函数,它就会返回给我们一个按序存储着结果的简易列表。

为什么它这么厉害呢?因为只要有了合适的库,map能使并行运行得十分流畅!

PS  可以用lambda实现简单的列表构造,比如  a = map(lambda x : x+2, [1,2,3,4,5])      ,不过时间是列表解析的两倍,性能不好  

衍生的 多线程中使用map的例子:
http://www.open-open.com/news/view/1c0179b

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值