• 进程池


    产生原因:
      如果有大量的任务需要多进程完成,则可以需要频繁的创建删除进程,给计算机带来了较多的资源消耗

    处理原理:
      创建适当的进程放入进程池,用来处理待处理事件,处理完毕后进程不销毁,仍然在进程池中等待处理其他事件。进程的复用降低了资源的消耗。

    使用方法:
      1.创建进程池,在池内放入适当的进程
      2.将事件加入到进程池,等待队列
      3.不断取进程执行事件,知道所有事件执行完毕
      4.关闭进程池,回收进程

    函数方法:

    Pool(processes)
      功能:创建进程池对象
      参数:进程数量
      返回 : 进程池对象

    pool.apply_async(func, args, kwds) 异步
      功能:将事件放入到进程池队列
      参数:func 事件函数
      args 以元组形式给func传参
      kwds 以字典形式给func传参
      返回值:返回一个代表进程池事件的对象

    pool.apply(func, args, kwds) 同步
      功能:将事件放入到进程池队列
      参数:func 事件函数
      args 以元组形式给func传参
      kwds 以字典形式给func传参  

    pool.close()
      功能:关闭进程池

    pool.join()
      功能:回收进程池     注意:具有阻塞功能,等待子进程运行结束

    pool.map(func, iter)
      功能:将要做的事件放入进程池
      参数:func 要执行的函数
      iter 迭代对象
      返回值:返回事件函数的返回值列表 

    实例代码:
    from multiprocessing import Pool
    from time import sleep,ctime
    
    def worker(msg):
        sleep(2)
        print(msg)
        return ctime()
    
    #创建进程池
    pool = Pool(processes = 4)
    
    result = []
    for i in range(10):
        msg = "hello %d" % i
        #将事件放入进程池队列,等待执行
        r = pool.apply_async(func = worker, args = (msg,))
        result.append(r)
    
    #光闭进程池
    pool.close()
    
    #回收
    pool.join()
    for i in result:
        print(i.get())   #获取对象的还回值

     

  • 相关阅读:
    Java StringTokenizer Example
    java 删除字符串中的特定字符
    [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容
    Uniform resource name
    [Python]网络爬虫(一):抓取网页的含义和URL基本构成
    coco2dx 精灵类
    window和nodejs作用域区别(待续)
    ubuntu开机遇到-您的当前网络有.local域,我们不建议这样做而且这与AVAHI网络服务探测不兼容。该服务已被禁用
    ruby中的reject和reject!
    ruby中将数组转换成hash
  • 原文地址:https://www.cnblogs.com/zengsf/p/9637853.html
Copyright © 2020-2023  润新知