zoukankan      html  css  js  c++  java
  • 第二十六篇、进程池

    进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。

    进程池中有两个方法:

    • apply
    • apply_async
    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    from multiprocessing import Pool
    import time
    def f1(a):
        time.sleep(2)
        print(a)
        return 1000
    def f2(args):
        print(args)
    
    if __name__ == '__main__':
        pool = Pool(5)
        for i in range(10):
            #pool.apply_async(func=f1,args=(1,),callback=f2)
            pool.apply(func=f1,args=(1,))
            print(111)
        pool.close()#代表所有任务执行之后再执行join方法终止
        #pool.terminate()
        pool.join()#进程池的join方法,让主进程等待子进程执行完毕之后再结束

    p = pool(5)

    p.apply如下方法:

    1、 每一个任务是排队进行;

    2、每一个进程里面都有一个join方法:进程.join(),要不然上面代码不会一个进程一个进程的往下执行

    p.apply_async如下方法:

     1、每一个任务都并发进行,(先在进程池里面创建所有进程,然后并发执行,异步的)

    2、可以设置回调函数;callback=Bar  回调函数,就是把func=f1的函数的返回值 放入到Bar函数参数里面继续往下执行

    3、进程没有join方法,主进程没有等子进程,进程的deamon = True,用这个方法必须要用join方法

    由于p.apply_async方法,要用到join方法,在这之前要用到close或者terminate方法原因如下:

    查看join方法:

    从join源码中可以知道,要执行join方法必须首先执行close或者terminate方法

  • 相关阅读:
    C语言开发CGI程序的简单例子
    js收集错误信息,错误上报
    php安装pear、pecl
    (转)进程与线程的一个简单解释
    php curl 中的gzip压缩性能测试
    (转载):() { :|:& }; : # <-- 打开终端,输入这个,回车.你看到了什么??
    (转)open和fopen的区别:
    C语言中typedef
    secureCRT使用VIM 像LINUX中那样对语法高亮
    iframe与主框架跨域相互访问方法
  • 原文地址:https://www.cnblogs.com/pyrene/p/6490256.html
Copyright © 2011-2022 走看看