代码示例: day7/process_attr.py
p.name 进程名称
p.pid 对应子进程的PID号
p.is_alive() 查看子进程是否在生命周期
p.daemon 设置父子进程的退出关系
如果设置为True则子进程会随父进程的退出而结束
要求必须在start()前设置
如果daemon设置成True 通常就不会使用 join()

自定义进程类

代码示例: day7/myProcess.py

  1. 创建步骤
    【1】 继承Process类
    【2】 重写 init 方法添加自己的属性,使用super()加载父类属性
    【3】 重写run()方法
  2. 使用方法
    【1】 实例化对象
    【2】 调用start自动执行run方法
    【3】 调用join回收进程

进程池实现

代码示例: day7/pool.py

  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()
    功能: 回收进程池中进程
    进程线程编程

进程间通信(IPC)

  1. 必要性: 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信。
  2. 常用进程间通信方法
    管道 消息队列 共享内存 信号 信号量 套接字

消息队列

代码示例: day7/queue_0.py
1.通信原理
在内存中建立队列模型,进程通过队列将消息存入,或者从队列取出完成进程间通信。
2. 实现方法
from multiprocessing import Queue

q = Queue(maxsize=0)
功能: 创建队列对象
参数:最多存放消息个数
返回值:队列对象

q.put(data,[block,timeout])
功能:向队列存入消息
参数:data 要存入的内容
block 设置是否阻塞 False为非阻塞
timeout 超时检测

q.get([block,timeout])
功能:从队列取出消息
参数:block 设置是否阻塞 False为非阻塞
timeout 超时检测
返回值: 返回获取到的内容

q.full() 判断队列是否为满
q.empty() 判断队列是否为空
q.qsize() 获取队列中消息个数
q.close() 关闭队列
进程线程编程

线程编程(Thread)

线程基本概念

  1. 什么是线程
    【1】 线程被称为轻量级的进程
    【2】 线程也可以使用计算机多核资源,是多任务编程方式
    【3】 线程是系统分配内核的最小单元
    【4】 线程可以理解为进程的分支任务
  2. 线程特征
    【1】 一个进程中可以包含多个线程
    【2】 线程也是一个运行行为,消耗计算机资源
    【3】 一个进程中的所有线程共享这个进程的资源
    【4】 多个线程之间的运行互不影响各自运行
    【5】 线程的创建和销毁消耗资源远小于进程
    【6】 各个线程也有自己的ID等特征

threading模块创建线程

代码示例: day7/thread1.py
代码示例: day7/thread2.py

【1】 创建线程对象
from threading import Thread
t = Thread()
功能:创建线程对象
参数:target 绑定线程函数
args 元组 给线程函数位置传参
kwargs 字典 给线程函数键值传参
【2】 启动线程
t.start()
【3】 回收线程
t.join([timeout])
进程线程编程

相关文章:

  • 2021-05-15
  • 2022-12-23
  • 2022-02-09
  • 2021-10-21
  • 2021-12-16
  • 2022-01-10
  • 2022-01-07
  • 2022-02-18
猜你喜欢
  • 2021-10-09
  • 2022-02-05
  • 2021-07-26
  • 2021-10-26
  • 2022-12-23
相关资源
相似解决方案