zoukankan      html  css  js  c++  java
  • Python--pool

    1.进程池


    进程池技术的应用至少由以下两部分组成:

    资源进程:

    预先创建好的空闲进程,管理进程会把工作分发到空闲进程来处理。

    管理进程:

    管理进程负责创建资源进程,把工作交给空闲资源进程处理,回收已经处理完工作的资源进程。
    上面资源进程跟管理进程的概念很好理解,下面就是进程池的关键,管理进程如何有效的管理资源进程,分配任务给资源进程,回收空闲资源进程,管理进程要有效的管理资源进程,那么管理进程跟资源进程间必然需要交互,通过IPC,信号,信号量,消息队列,管道等进行交互。

    2.代码


    import os
    import multiprocessing
    import hashlib
    
    #BUFERSIZE:读取缓冲区大小
    #Poolsize:工作进程数量
    
    BUFSIZE=8192
    POOLSIZE=2
    def compute_digest(filename):
        try:
            f=open(filename,'rb')
        except IOError:
            return None
        digest=hashlib.sha512()
        while True:
            chunk=f.read(BUFSIZE)
            if not chunk:break
            digest.update(chunk)
        f.close()
        return filename,digest.digest()
    def build_digest_map(topdir):
        digest_pool=multiprocessing.Pool(POOLSIZE)
        allfiles=(os.path.join(path,name) for path,dirs,files in os.walk(topdir) for name in files )
    	digest_map=dict(digest_pool.imap_unordered(compute_digest,allfiles,20))							                  
        digest_pool.close()
        return digest_map
       
    if __name__=='__main__':
        digest_map=build_digest_map(r'F:Anaconda3Libsite-packagessklearn')
        print(len(digest_map))
        
    

    multiprocesssing.Pool.imap_unordered(func,iterable,[,chunksize])

    返回迭代器而非结果列表,与imap的区别在于结果的顺序根据从工作进程接受到的时间任意确定。

    hashlib:摘要算法

    摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。
    python中hashlib有MD5,SHA1,SHA126,SHA256等
    关于哈希算法参见廖雪峰大神的blog

  • 相关阅读:
    MySQL 高可用架构在业务层面的分析研究
    HDU 4983 Goffi and GCD(数论)
    Request中的方法调用
    servlet中不能没有无参构造函数
    ServletConfig、ServletContext属性遍历
    Eclipse格式化代码换行、删除空行
    Spring EL中的类操作符
    Spring集合配置
    spring EL表达式,null-safe表达式
    spring的value,null标签
  • 原文地址:https://www.cnblogs.com/yangjing000/p/8204645.html
Copyright © 2011-2022 走看看