python - time.sleep 对线程访问的影响
问题描述
在 python 中,我有一个访问全局对象的多线程应用程序。很好奇,如果我将 time.sleep() 放在即将访问全局对象的线程(例如 THREAD 1)上,time.sleep() 是否会延迟 THREAD 1 对全局对象的访问,以使其他线程不会有 time.sleep() 能够首先访问全局对象吗?
解决方案
Python 中的线程非常复杂,并且在同一个内存堆中运行。线程基本上是同时运行的,即多个线程交错在一起,这样一次只运行一次,并且它们在很短的时间内交替运行(考虑到它们需要访问解释器)。
当你让一个线程进入睡眠状态时,它基本上会使用底层系统睡眠功能并阻止对其进行的所有操作。但是,其他线程肯定是可操作的。因此,当您说 THREAD1 在即将访问全局变量之前进入睡眠状态时,其他线程显然会使用该变量,因为它们正在运行而 THREAD1 没有。
一旦 THREAD1 唤醒,如果需要,它应该获取 GIL 并访问全局变量。由于它再次与其他线程交错,由于并发性,它在激活时立即访问全局变量。如果其他线程正在使用它,它们将在 THREAD1 开始操作之前放弃访问。
推荐阅读
- python - 按行顺序从 postgres 读取数据
- gerrit - Gerrit 搜索通过“之前”语句进行更改并遇到了一些问题
- julia - 如何在 Julia 中计算 CAPM 变量?
- swift - 在 Swift 5 中解码枚举 - 这不可能这么难
- arrays - 从 CSV 文件中捕获数据包含 API 请求的变量以保存在新的 CSV 文件中
- python - 在 Pandas DataFrame 中删除多个行范围
- wordpress - 我如何将登录模式从主题库更改为其他插件 wordpress
- javascript - 堆叠条形图 yAxis plotbands 宽度在动态切换/添加/删除系列时发生变化
- sql - 访问 sql 查询以从多个表中进行选择
- php - 异步运行 PHP 循环