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 # 关闭向操作系统的申请
  • 相关阅读:
    java 删除文件目录
    java导出echart图到excel 多张图片导出
    java导出sql文件
    split方法使用
    jqgrid列表添加单选框
    会消失的链接
    运用javascript做出链接类特效
    创建守护进程的步骤
    ext2文件系统
    C++枚举类型enum
  • 原文地址:https://www.cnblogs.com/wy3713/p/9378341.html
Copyright © 2011-2022 走看看