多任务编程 -- multiprocessing 模块(创建多进程)

进程创建方法:

  1. 流程特点
    1. 将需要子进程执行的事件封装为函数;
    2. 通过模块的Process类,创建进程对象,关联函数;
    3. 可以通过进程对象,设置进程信息及属性;
    4. 通过进程对象,调用start启动进程;
    5. 通过进程对象,调用join回收进程。
  2. 基本接口使用
    1. Process():
      1. 功能:创建进程对象
      2. 参数:
        1. target:绑定要执行的目标函数;
        2. args:元祖,用于给target函数,位置传参;
        3. kwargs:字典,用于给target函数,键值传参。
    2. p.start()
      1. 功能:启动进程
      2. 注意:启动进程,此时target绑定的函数开始执行,该函数作为子进程执行内容,此时进程真正被创建。
    3. p.join([timeout])
      1. 功能:阻塞等待回收进程
      2. 参数:超时时间
  3. 注意
    1. 使用multiprocessing创建进程,同样是,子进程复制父进程内存空间代码段父子进程运行互不影响
    2. 子进程只运行target绑定的函数部分,其余内容,均是父进程执行内容;
    3. 父进程往往只用来创建子进程、回收子进程,具体事件有子进程完成;
    4. multiprocessing创建的子进程中,无法使用标准输入(即:input)。
  4. 进程对象属性
    1. p.name:进程名称;
    2. p.pid:对应子进程的PID号;
    3. p.is_alive():查看子进程是否在生命周期;
    4. p.daemon:设置父子进程的退出关系:
      1. True:子进程会随父进程的退出而结束;
      2. 要求:必须在start()前设置;
      3. 如果daemon被设置为True,通常就不会使用join()

实例代码:

Python3多进程 multiprocessing 模块实例详解_python_脚本之家

进程池实现:

  1. 必要性
    1. 进程的创建和销毁过程,消耗的资源较多;
    2. 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。此时,对计算机压力较大。
    3. 进程池技术很好的解决了以上问题。
  2. 原理
    1. 图解
    2. 创建进程池对象,放入适当的进程
      1. from multiprocessing import Pool
        
        Pool(processes)
      2. 功能:创建进程池对象
      3. 参数:指定进程数量,默认根据系统自动判定(计算机的核数)
    3. 将事件加入进程池队列,执行
      1. from multiprocessing import Pool
        
        pool = Pool(3)
        
        pool.apply_async(func, args, kwds)
      2. 功能:使用进程池执行 func事件
      3. 参数:
        1. func:事件函数
        2. args:元祖,给func按位置传参
        3. kwds:字典,给func按键值传参
    4. 关闭进程池
      1. pool.close():
      2. 功能:关闭进程池
    5. 回收进程池中进程
      1. pool.join():
      2. 功能:回收进程池中进程。

猜你喜欢

转载自www.cnblogs.com/gengyufei/p/12906857.html