0
点赞
收藏
分享

微信扫一扫

Python进阶:进程的状态及基本操作

耶也夜 2022-03-11 阅读 45

文章目录


一、进程以及状态

  • 进程:资源分配的基本单位,也是线程的容器

  • 进程的状态:

    * 新建

    * 就绪

    * 运行

    * 等待

    * 死亡

二、[重点]进程-基本使用

  • 进程使用的步骤:

    • 导入模块

    • 创建子进程对象

    • 启动子进程

三、[重点]进程-名称、PID

  • 获取进程的名称

  • 获取进程的编号

  • 获取进程的父id

  • 结束进程

四、[重点]进程-参数传递、全局变量问题

  • 进程的参数传递

    • args 元组

    • kwargs 字典

    • 混合args 和 kwargs

  • 进程间共享全局变量的问题

五、[重点]进程-守护主进程

  • 进程守护: 子进程和主进程的一种约定,当主进程结束的时候,子进程也随之结束

  • 结束子进程

六、进程、线程对比

  • 进程和线程的对比
    • 进程是资源分配的基本单位,线程是CPU调度的基本单位
    • 进程运行需要独立的内存资源, 线程需要到的是必不可少的一点资源
    • 进程切换慢,线程切换更快
    • 线程不能独立运行,必须运行在进程中(进程能提供资源)
    • CPU密集型 进程优先, I/O 密集型使用线程
    • 程序更稳定进程,线程相比较不够稳定
  • 不是非此即彼,而是组合使用

七、[重点]消息队列-基本操作

  • 消息队列的学习的目的:为了实现进程间的通信

  • 队列的创建:

    • 导入模块 multiprocessing
    • multiprocessing.Queue(5) # 队列长度为5
  • 队列的操作:

    • 放入值 queue.put(值) —>从队列尾部放入值

    • 取值: queue.get() --> 从队列头部取值

    • xxxx_nowait() 方式

      • 放入值 put_nowait() 特点:队列未满,同put() 但是队列已满,会报错,不等待
      • 取值 get_nowait() 特点:队列未空,同get() 但是队列已空,会报错,不等待

八、消息队列-常见判断

  • 常见的判断
    • full() 判断是否已满
    • empty() 判断是否为空
  • 取出队列中消息的数量
    • qsize()

九、[重点]Queue实现进程间通信

  • 思路:利用队列在两个进程间进行传递,进而实现数据共享
    • write_queue(queue)
    • read_queue(queue)
    • 创建一个空队列
    • 把空队列作为参数,先把队列传递给写进程,然后把队列再传递给读进程
  • join() 优先让一个进程先执行完成,另外一个进程才能启动

十、[重点]进程池Pool

  • 进程池:是一个进程的容器,可以自动帮我们创建指定数量的进程,并且管理进程及工作

    • 创建方法:

    • 工作方式:

      • 同步方式:

        pool.apply(函数名,(参数1,参数2,…))

        进程池中的进程,一个执行完毕后另外一个才能执行,多个进程执行有先后顺序

      • 异步方式:

        pool.apply_async(函数名,(参数1,参数2,…))

        进程池中的进程,多个进程同时执行,没有先后顺序

        1) 进程池要 close() 表示不再接受新的任务

        2)还要join() 表示让主进程等待进程池执行结束后再退出

十一、进程池中的Queue

  • 获取方法:

十二、案例:文件夹copy器(多进程版)

  • 思路:

  • 进程池拷贝文件

  • 创建文件夹

  • 获取文件夹中的内容

十三、[重点]可迭代对象及检测方法

  • 可迭代对象

  • 可迭代对象的检测:

十四、[重、难点]迭代器及其使用方法

  • 迭代器的作用:

  • 获取迭代器

  • 获取可迭代对象的值

  • for循环的本质:

  • 自定义迭代器类

举报

相关推荐

python字典及基本操作

【os】进程基本操作

0 条评论