zoukankan      html  css  js  c++  java
  • 多任务编程 -- 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. 功能:回收进程池中进程。
  • 相关阅读:
    JetBrains全系列破解
    BZOJ 4817: [Sdoi2017]树点涂色 LCT + DFS序 + 线段树
    LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 LCT + SAM + 线段树
    Uoj 52. 【UR #4】元旦激光炮 交互题
    Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维
    luoguP3979 遥远的国度 LCT + multiset维护子树信息
    BZOJ 4999: This Problem Is Too Simple! DFS序 + LCA + 树状数组 + 离线
    BZOJ 1787: [Ahoi2008]Meet 紧急集合
    BZOJ 2959: 长跑 LCT + 并查集 + 点双
    BZOJ 4259: 残缺的字符串 FFT
  • 原文地址:https://www.cnblogs.com/gengyufei/p/12906857.html
Copyright © 2011-2022 走看看