1. 使用map方法
- import multiprocessing
- import time
- def f(x):
- time.sleep(2)
- print x
- if __name__ == '__main__':
- pool = multiprocessing.Pool(processes=5)
- 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函数能够按序映射出另一个函数。例如
1 | urls = [ 'http://www.yahoo.com' , 'http://www.reddit.com' ] |
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