python 多线程处理

Posted CSR-kkk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程处理相关的知识,希望对你有一定的参考价值。

首先需要了解 进程与线程 这两个概念

进程:

  1. 进程是执行中的程序

  2. 拥有独立地址空间、内存、数据栈等

  3. 操作系统管理

  4. 派生(fork 或 spawn)新进程

  5. 进程间通信(IPC)方式共享信息

  6. 并行,同时进行

线程:

  1. 同进程下执行,并共享相同的上下文

  2. 线程间的信息共享和通信更加容易

  3. 多线程 并发 执行,同一时刻只会执行一个线程,交互执行(python中)

  4. 需要同步原语

p y t h o n 与 线 程 \\color{#ff8c2e}{python 与 线程} python线

  1. 解释器主循环
  2. 主循环只有一个控制线程在进行
  3. 使用全局解释器锁(GIL)

G I L 保 证 一 个 线 程 \\color{#ff8c2e}{GIL保证一个线程} GIL线

  1. 设置GIL
  2. 切换进一个线程去执行
  3. 执行下面操作之一
    • 指定数量的字节码指令
    • 线程主动让出控制权
  4. 把线程设置回睡眠状态(切换出线程)
  5. 解锁GIL
  6. 重复上述步骤

两 种 线 程 管 理 方 式 \\color{#ff8c2e}{两种线程管理方式} 线

_thread:提供了基本的线程和锁

(缺点:主线程退出后会 kill 所有子线程,没有守护线程)

threading:提供了更高级别、功能更全面的线程管理(底层是_thread)

  • 支持同步机制
  • 支持守护线程

_thread模块

函数/方法描述
thread模块的函数
start_new_thread(function, args, kwargs=None)派生一个新的线程, 使用给定的 args 和可选的 kwargs 来执行 function
allocate_lock()分配 LockType 锁对象
exit()给线程退出指令
LockType 锁对象的方法
acquire(wait=None)尝试获取锁对象
locked()如果获取了锁对象则返回 True,否则返回 False
release()释放锁

代码举例链接:thread、threading、继承threading的__init_ 并重写 run()




原语

信号量

以上是关于python 多线程处理的主要内容,如果未能解决你的问题,请参考以下文章

Python 多处理线程 Asyncio

Python 中的多线程还是串行处理?

python之多线程并发处理模块-threading

Python中的多处理与线程

Python中的多处理:处理多个工作线程

python多线程