码迷,mamicode.com
首页 > 编程语言 > 详细

Map功能简化Python并发代码

时间:2014-09-01 12:05:43      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   使用   strong   ar   

<转摘>Python 并行任务技巧

支持Map并发的包文件有两个:

Multiprocessing,还有少为人知的但却功能强大的子文件 multiprocessing.dummy

Dummy是一个多进程包的完整拷贝。唯一不同的是,多进程包使用进程,而dummy使用线程(自然也有Python本身的一些限制)。所以一个有的另一个也有。这样在两种模式间切换就十分简单,并且在判断框架调用时使用的是IO还是CPU模式非常有帮助.

导入相关包

1 from multiprocessing import Pool
或者
2 from multiprocessing.dummy import Pool as ThreadPool

初始化

1 pool = ThreadPool()
 1 import urllib2 
 2 from multiprocessing.dummy import Pool as ThreadPool 
 3 
 4 urls = [
 5     http://www.python.org, 
 6     http://www.python.org/about/,
 7     http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html,
 8     http://www.python.org/doc/,
 9     http://www.python.org/download/,
10     http://www.python.org/getit/,
11     http://www.python.org/community/,
12     https://wiki.python.org/moin/,
13     http://planet.python.org/,
14     https://wiki.python.org/moin/LocalUserGroups,
15     http://www.python.org/psf/,
16     http://docs.python.org/devguide/,
17     http://www.python.org/community/awards/
18     # etc.. 
19     ]
20 
21 # Make the Pool of workers
22 pool = ThreadPool(4) 
23 # Open the urls in their own threads
24 # and return the results
25 results = pool.map(urllib2.urlopen, urls)
26 #close the pool and wait for the work to finish 
27 pool.close() 
28 pool.join()

pool对象需要一些参数它可以限定线程池中worker的数量。如果不填,它将采用系统的内核数作为初值.

如果你进行的是计算密集型多进程任务,内核越多意味着速度越快(当然这是有前提的)。但如果是涉及到网络计算方面,影响的因素就千差万别。所以最好还是能给出合适的线程池大小数

如果运行的线程很多,频繁的切换线程会十分影响工作效率。所以最好还是能通过调试找出任务调度的时间平衡点

 

Map功能简化Python并发代码

标签:style   blog   http   color   os   io   使用   strong   ar   

原文地址:http://www.cnblogs.com/aveenzhou/p/3948801.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!