python 多线程处理
Posted CSR-kkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程处理相关的知识,希望对你有一定的参考价值。
首先需要了解 进程与线程 这两个概念
进程:
-
进程是执行中的程序
-
拥有独立地址空间、内存、数据栈等
-
操作系统管理
-
派生(fork 或 spawn)新进程
-
进程间通信(IPC)方式共享信息
-
并行,同时进行
线程:
-
同进程下执行,并共享相同的上下文
-
线程间的信息共享和通信更加容易
-
多线程 并发 执行,同一时刻只会执行一个线程,交互执行(python中)
-
需要同步原语
p y t h o n 与 线 程 \\color{#ff8c2e}{python 与 线程} python与线程
- 解释器主循环
- 主循环只有一个控制线程在进行
- 使用全局解释器锁(GIL)
G I L 保 证 一 个 线 程 \\color{#ff8c2e}{GIL保证一个线程} GIL保证一个线程
- 设置GIL
- 切换进一个线程去执行
- 执行下面操作之一
- 指定数量的字节码指令
- 线程主动让出控制权
- 把线程设置回睡眠状态(切换出线程)
- 解锁GIL
- 重复上述步骤
两 种 线 程 管 理 方 式 \\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 多线程处理的主要内容,如果未能解决你的问题,请参考以下文章