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

    为什么使用进程池:

    当需要创建的子进程数量不多时,可以直接利用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()的目的是让主进程等待子进程执行完毕!

  • 相关阅读:
    黑客常用端口利用总结
    10.Python之Ansible自动化运维常用模块
    正确启用HTTP/2支持,正确配置ssl_protocols和ssl_ciphers
    JVM总体架构
    什么是线程安全以及如何保证线程安全
    Jsp和Servlet的区别
    JQuery Ajax() serialize()方法提交Form表单数据
    SQL性能优化
    Java中的集合类及关系图
    什么是泛型、为什么要使用以及泛型擦除
  • 原文地址:https://www.cnblogs.com/zach0812/p/11424033.html
Copyright © 2011-2022 走看看