zoukankan      html  css  js  c++  java
  • 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 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的数量。如果不填,它将采用系统的内核数作为初值.

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

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

  • 相关阅读:
    理解Device Tree Usage
    Unhandled Exception in EL3
    python的multitask模块安装
    利用python制作在线视频播放器遇到的一些问题
    设置linux代理完成apt-get
    Eric6安装问题解决
    关于代码重构的比喻
    AAC的RTP封装中的AU头分析
    CORE DUMP生成调试
    开源库SRT编译指南
  • 原文地址:https://www.cnblogs.com/aveenzhou/p/3948801.html
Copyright © 2011-2022 走看看