• Python并发编程—进程池


    进程池实现

    1.必要性
    【1】 进程的创建和销毁过程消耗的资源较多
    【2】 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。此时对计算机压力较大
    【3】 进程池技术很好的解决了以上问题。

    2.原理

    创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。

    3.进程池实现

    【1】 创建进程池对象,放入适当的进程

    from multiprocessing import Pool

    Pool(processes)

    • 功能: 创建进程池对象
    • 参数: 指定进程数量,默认根据系统自动判定

    【2】 将事件加入进程池队列执行

    pool.apply_async(func,args,kwds)

    • 功能: 使用进程池执行 func事件
    • 参数: func 事件函数
    •   args 元组 给func按位置传参
    •   kwds 字典 给func按照键值传参
    • 返回值: 返回函数事件对象

    【3】 关闭进程池

    pool.close()

    • 功能: 关闭进程池

    【4】 回收进程池中进程

    pool.join()

    • 功能: 回收进程池中进程
     1 from multiprocessing import Pool
     2 from time import sleep,ctime
     3 
     4 # 进程池事件
     5 def worker(msg):
     6   sleep(2)
     7   print(msg)
     8   return ctime()
     9 
    10 # 创建进程池
    11 pool = Pool(4)
    12 
    13 # 向进程池添加执行事件
    14 for i in range(10):
    15   msg = "Hello %d"%i
    16 
    17   # r 代表func事件的一个对象
    18   r = pool.apply_async(func=worker,args=(msg,))
    19 
    20 # 关闭进程池
    21 pool.close()
    22 
    23 # 回收进程池
    24 pool.join()
    25 
    26 print(r.get()) # 可以获取事件函数的返回值
    进程池使用演示
  • 相关阅读:
    CentOS中基于不同版本安装重复包的解决方案
    诺讯科技
    SQLMap使用
    python初码
    优秀软件project师必备的7大特性
    3.2 Piecewise Linear Interpolation(站点)
    C#开发Unity游戏教程之游戏对象的属性变量
    java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4
    一键解决ScrollView嵌套ListView仅仅显示一行的问题
    W5500中断寄存器的理解
  • 原文地址:https://www.cnblogs.com/maplethefox/p/10989156.html
Copyright © 2020-2023  润新知