time.sleep对线程访问的影响

时间:2019-01-17 04:29:48

标签: python multithreading sleep thread-sleep

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

1 个答案:

答案 0 :(得分:4)

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

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

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