• python 进程池pool简单使用


    python 进程池pool简单使用

      平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用。

      需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ‘__main__’ :语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。

      Pool类

       Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,

      才会创建新的进程来执行这些请求。 
      下面介绍一下multiprocessing 模块下的Pool类下的几个方法:

      1、apply()

        函数原型:apply(func[, args=()[, kwds={}]])

        该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束(不建议使用,并且3.x以后不在出现)。

      2、apply_async

        函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])

        与apply用法一致,但它是非阻塞的且支持结果返回后进行回调。

      3、map()

         函数原型:map(func, iterable[, chunksize=None])

        Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回。 
        注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。

      4、map_async()

        函数原型:map_async(func, iterable[, chunksize[, callback]])
        与map用法一致,但是它是非阻塞的。其有关事项见apply_async。

      5、close()

        关闭进程池(pool),使其不在接受新的任务。

      6、terminal()

        结束工作进程,不在处理未处理的任务。

      7、join()

        主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用。

      简单实现代码

    复制代码
    import multiprocessing
    import time
    
    
    def func(msg):
        print("msg:", msg)
        time.sleep(3)
        print("end,", msg)
    
    if __name__ == "__main__":
        # 这里设置允许同时运行的的进程数量要考虑机器cpu的数量,进程的数量最好别小于cpu的数量,
        # 因为即使大于cpu的数量,增加了任务调度的时间,效率反而不能有效提高
        pool = multiprocessing.Pool(processes = 3)
        item_list = ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5' ,]
        count = len(item_list)
        for item in item_list:
            msg = "hello %s" %item
            # 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
            pool.apply_async(func, (msg,))
    
        pool.close()
        pool.join()  # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
  • 相关阅读:
    动态设置字体大小需要注意的点
    getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
    统计图钻取的明细报表在非模态窗口中显示
    局部区块多个报表 TAB 页切换及局部区块的参数查询
    分栏报表制作攻略
    多值关联过滤
    鼠标悬停出现提示信息怎么做
    复杂报表设计之动态报表
    Logo(图片)作为报表水印的解决方法
    分组填报表的制作
  • 原文地址:https://www.cnblogs.com/lgj8/p/13303888.html
Copyright © 2020-2023  润新知