• 进程池


    为什么使用进程池:

    当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大

    而且极其的浪费资源!

    此时就可以用到multiprocessing模块提供的Pool方法。

    进程池的创建:

     1 # -*- coding:utf8 -*-
     2 #Author: ZCB
     3 
     4 from multiprocessing import Pool
     5 import os,time,random
     6 
     7 def func(msg):
     8     t_start = time.time()
     9     print("%s 开始执行,进程号为%d "%(msg,os.getpid()))
    10     time.sleep(random.random()*2)  #0-1
    11     t_stop = time.time()
    12     print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start))
    13 
    14 if __name__ == '__main__':
    15     pool = Pool(3)  #池里最多开三个进程
    16     for i in range(10):
    17         pool.apply_async(func,(i,))
    18 
    19     print("{:=^20}".format("start"))
    20     pool.close()  #关闭进程池后,poll 不再接受新的请求
    21     pool.join() # 主进程要 等待 子进程执行完毕  它必须放在 close() 后
    22     print("{:=^20}".format("end"))
    23     '''
    24     输出:
    25     =======start========
    26     0 开始执行,进程号为13148 
    27     1 开始执行,进程号为7988 
    28     2 开始执行,进程号为1916 
    29     0 执行完毕,耗时0.34
    30     3 开始执行,进程号为13148 
    31     1 执行完毕,耗时0.44
    32     4 开始执行,进程号为7988 
    33     2 执行完毕,耗时1.09
    34     5 开始执行,进程号为1916 
    35     4 执行完毕,耗时0.83
    36     6 开始执行,进程号为7988 
    37     6 执行完毕,耗时0.58
    38     7 开始执行,进程号为7988 
    39     5 执行完毕,耗时0.85
    40     8 开始执行,进程号为1916 
    41     8 执行完毕,耗时0.30
    42     9 开始执行,进程号为1916 
    43     3 执行完毕,耗时1.99
    44     7 执行完毕,耗时1.08
    45     9 执行完毕,耗时1.71
    46     ========end=========
    47     '''
    View Code

    注意:pool.join()一定要放在 pool.close() 后,join()的目的是让主进程等待子进程执行完毕!

  • 相关阅读:
    iris中间件
    go并发设计模式 --资源生成器模式
    Navicate
    golang sftp传输文件
    升级python
    在centos上面开机自启动某个程序
    文件MD5
    python模块之logging
    python之八大排序方法
    python生成器
  • 原文地址:https://www.cnblogs.com/zach0812/p/11424033.html
Copyright © 2020-2023  润新知