首页 > 代码库 > Map功能简化Python并发代码
Map功能简化Python并发代码
<转摘>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 workers22 pool = ThreadPool(4) 23 # Open the urls in their own threads24 # and return the results25 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并发代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。