zoukankan      html  css  js  c++  java
  • python中的进程池:multiprocessing.Pool()

    python中的进程池:
    我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池
    进程池帮助我们创建进程完成任务,不需要我们管理。


    进程池:利用multiprocessing 下的Pool能够创建进程池
    Pool(n) 传入一个n能够开一个能容纳n个进程任务的进程池。
    如果不传入参数,或者传入负数 能开一个动态控制大小的进程池

    具体的使用方法如下:提醒大家要认真看注释
     1 from multiprocessing import Pool
     2 import os,time,random
     3 #绑定给进程工作的函数
     4 def work(num):
     5     t1 = time.time()
     6     print("阻塞%s开始,pid:%s"%( num , os.getpid() ))
     7     time.sleep(random.random()*2)
     8     t2 = time.time()
     9     print("阻塞%s结束,消耗时间%.2f"%( num,t2 - t1 ))
    10 
    11 def work2(num):
    12     t1 = time.time()
    13     print("非阻塞%s开始,pid:%s" % (num, os.getpid()))
    14     time.sleep(random.random() * 4)
    15     t2 = time.time()
    16     print("非阻塞%s结束,消耗时间%.2f" % (num, t2 - t1))
    17 
    18 if __name__ == "__main__":
    19     # p = Pool(3) #开启一个能开三个任务进程的进程池
    20     # for i in range(10):
    21     #     #非阻塞的调用func,第二个参数是进程帮我们调用work的时候调的参数表
    22     #     #p.apply_async( work , (i,))
    23     #     #以阻塞的形式产生进程任务,生成一个任务进程,等它执行完出池第二个进程才会闯进进池,主进程一直在这里阻塞等待
    24     #     p.apply( work,(i,) )
    25     #     print(i)
    26     # print("开始")
    27 
    28     p = Pool(50)
    29     for i in range(20):
    30         # 非阻塞提交,我们发现,直接丢20个任务给进程池,
    31         # 主进程就不管了,会继续向下执行代码,进程池帮我们管理,把20个执行完
    32         p.apply_async(work2, (i,)  )
    33 
    34     for i in range(10):
    35         p.apply(work , (i, ) )
    36 
    37     #关闭进程池,不再接收其他任务
    38     p.close()
    39 
    40     # join就是阻塞等待所有任务执行完再继续
    41     #主进程会卡在这里,等所有进程结束再继续执行
    42     #一定更要先关闭进程池 才能阻塞等待
    43     p.join()
    44     print("结束")
  • 相关阅读:
    【FZYZOJ】数论课堂 题解(约数个数定理)
    【FZYZOJ】无向图的联通图个数 题解(组合数学)
    【BalticOI2003】Gem 题解(树形DP)
    中国剩余定理 学习笔记
    同余 学习笔记
    树形DP 学习笔记(树形DP、树的直径、树的重心)
    【USACO02FEB】Rebuilding Roads 重建道路 题解(树形DP)
    JavaSE 基础 第02节 搭建Java开发环境
    JavaSE 基础 第01节 Java语言介绍
    eclipse 调节字体大小
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7360923.html
Copyright © 2011-2022 走看看