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方法

  • 相关阅读:
    清除cookie
    判断是否为中文
    正则表达式
    smarty基础语法
    smarty模板
    ajax
    php工作笔记1
    PHP中超全局变量$GLOBALS和global的区别
    SQL连表查询
    linux上安装git(客户端)及GitHub的配置
  • 原文地址:https://www.cnblogs.com/pyrene/p/6490256.html
Copyright © 2011-2022 走看看