首页 > 解决方案 > time.sleep 对线程访问的影响

问题描述

在 python 中,我有一个访问全局对象的多线程应用程序。很好奇,如果我将 time.sleep() 放在即将访问全局对象的线程(例如 THREAD 1)上,time.sleep() 是否会延迟 THREAD 1 对全局对象的访问,以使其他线程不会有 time.sleep() 能够首先访问全局对象吗?

标签: pythonmultithreadingsleepthread-sleep

解决方案


Python 中的线程非常复杂,并且在同一个内存堆中运行。线程基本上是同时运行的,即多个线程交错在一起,这样一次只运行一次,并且它们在很短的时间内交替运行(考虑到它们需要访问解释器)。

当你让一个线程进入睡眠状态时,它基本上会使用底层系统睡眠功能并阻止对其进行的所有操作。但是,其他线程肯定是可操作的。因此,当您说 THREAD1 在即将访问全局变量之前进入睡眠状态时,其他线程显然会使用该变量,因为它们正在运行而 THREAD1 没有。

一旦 THREAD1 唤醒,如果需要,它应该获取 GIL 并访问全局变量。由于它再次与其他线程交错,由于并发性,它在激活时立即访问全局变量。如果其他线程正在使用它,它们将在 THREAD1 开始操作之前放弃访问。


推荐阅读