作家
登录

Python一行代码完成并行任务

作者: 来源: 2017-04-14 10:02:25 阅读 我要评论

'http://www.reddit.com'
  •  
  • results = map(urllib2.urlopen, urls)  
  • Dummy就是多过程模块的克隆文件。独一不合的是,多过程模块应用的是过程,而dummy则应用线程(当然,它有所有Python常见的限制)。也就是说,数据由一个传递给另一个。这可以或许使得数据轻松的在这两个之间进行进步和回跃,特别是对于摸索性法度榜样来说十分有效,因为你不消肯定框架调用到底是IO 照样CPU模式。

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

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

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

    有两个可以或许支撑经由过程map函数来完成并行的看魏一个是multiprocessing,另一个是鲜为人知但功能强大年夜的子文件:multiprocessing.dummy。

    题外话:这个是什么?你大年夜来没据说过dummy多过程库?我也是比来才知道的。它在多过程的解释文档琅绫擎仅仅只被提到了一句。并且那一句就是大年夜概让你知道有这么个器械的存在。我敢说,如许几近抛售的做法造成的后不雅是不堪假想的!

    预备开端

    要做到经由过程map函数来完成并行,你应当先导入装有它们的模块:

    1. from multiprocessing import Pool 
    2.  
    3. from multiprocessing.dummy import Pool as ThreadPool  

    再初始化:

    1. pool = ThreadPool() 

    如不雅我们用处行调用map来代替for轮回的话:

    这简单的一句就能代替我们的build_worker_pool 函数在example2.py中的所有工作。换句话说,它创建了很多有效的worker,启动它们来为接下来的工作做预备,以及把它们存储在不合的地位,便利应用。

    Pool对象须要一些参数,但最重要的是:过程。它决定pool中的worker数量。如不雅你不填的话,它就会默认为你电脑的内核数值。

    如不雅你在CPU模式下应用多过程pool,平日内核数越赶紧度就越快(还有很多其它身分)。然则,当进行线程或者处理收集绑定之类的工作时,情况会比较复杂所以应当应用pool的精确大年夜小。

    1. pool = ThreadPool(4) # Sets the pool size to 4 

    如不雅你运行过多线程,多线程间的切换将会浪费很多时光,所以你最好耐烦调试出最合适的义务数。

    我们如今已经创建了pool对象,立时就能有简单的并行法度榜样了,所以让我们从新写example2.py中的url opener吧!

    1. import urllib2 
    2.  
    3. from multiprocessing.dummy import Pool as ThreadPool 
    4.  
    5.   
    6.  
    7. urls = [ 
    8.  
    9. 'http://www.python.org'
    10.  
    11. 'http://www.python.org/about/'
    12.  
    13. 'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html'
    14.  
    15. 'http://www.python.org/doc/'
    16.  
    17. 'http://www.python.org/download/'
    18.  
    19. 'http://www.python.org/getit/'
    20.  
    21. 'http://www.python.org/community/'
    22.  
    23. 'https://wiki.python.org/moin/'

        推荐阅读

        理解深度学习的钥匙 –启蒙篇

      神经收集是有史以来创造的最优美的编程范式之⼀。在传统的编程⽅法中,我们告诉计算机做什么,把⼤问题分成很多小的、准肯定义的义务,计算机可以很轻易地履行。比拟之>>>详细阅读


      本文标题:Python一行代码完成并行任务

      地址:http://www.17bianji.com/lsqh/34782.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)