zoukankan      html  css  js  c++  java
  • 进程池进阶

    进程池

    def wahaha():
        time.sleep(1)
        print(os.getpid())
        return True
    
    if __name__ == '__main__':
        p = Pool(5)  # CPU的个数 或者 +1
        ret_l = []
        for i in range(20):
           ret = p.apply_async(func = wahaha) # async  异步的
           ret_l.append(ret)
        for ret in ret_l:
            print(ret.get())

    # 异步的 apply_async
    # 1.如果是异步的提交任务,那么任务提交之后进程池和主进程也异步了,
    #主进程不会自动等待进程池中的任务执行完毕
    # 2.如果需要主进程等待,需要p.join
    # 但是join的行为是依赖close
    # 3.如果这个函数是有返回值的
    # 也可以通过ret.get()来获取返回值
    # 但是如果一边提交一遍获取返回值会让程序变成同步的
    # 所以要想保留异步的效果,应该讲返回对象保存在列表里,所有任务提交完成之后再来取结果
    # 这种方式也可以去掉join,来完成

    进程池函数:

    from multiprocessing import Pool
    p = Pool(5)  # 创建进程池并且限定进程的个数
    ret = p.apply  # ret 返回值是可以直接打印的 ,是同步
    ret = p.apply_async 返回值是一个内存地址,需要用Get获取
    #如果一个一个获取则是同步,加入列表获取则是异步
    p.join # 堵塞到子进程结束
    p.close # 关闭向操作系统的申请
  • 相关阅读:
    实验5&期中考试后两题
    实验四——再探类
    实验3—初识类
    10.29算法训练——poj1475双重BFS
    10.25算法训练——裸线段树
    探索邻接表
    Hadoop学习之Combiner
    关于VLM模式下linux压缩根目录空间的心得
    C#微信公众号开发系列教程四(接收普通消息)
    c#分部类型详解
  • 原文地址:https://www.cnblogs.com/wy3713/p/9378341.html
Copyright © 2011-2022 走看看