在Python中,当一个线程被阻塞时会发生什么?

2024-09-28 05:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用两个线程t1t2从Internet抓取某些内容,并将一些过滤后的数据写入单个文件时,我使用Lock()实例来保证只有一个线程正在写入该文件。我知道当t1.aquire()被调用时,t2.aquire()t2置于阻塞状态。 我想知道的是,Python解释器中线程t2现在发生了什么。解释器会检查每个时间段的线程状态吗?而且,解释器是控制分配给单个线程的CPU时间,还是主机操作系统?你知道吗


Tags: 文件数据实例lock内容状态线程解释器
2条回答

任何系统调用都不可能中断锁上的acquire()方法。你知道吗

获取()

获取锁定、阻塞或非阻塞。

当在没有参数的情况下调用acquire时(考虑t1):如果这个线程已经拥有锁,则将递归级别增加一级,然后立即返回。 否则,如果另一个线程拥有锁,则阻塞直到锁被解锁。 一旦锁被解锁(不属于任何线程),然后获取所有权,将递归级别设置为1,然后返回。 如果有多个线程在等待锁解锁时被阻塞,那么一次只有一个线程能够获取锁的所有权。在这种情况下没有返回值。你知道吗

这个问题的答案是特定于实现的(也就是说,取决于解释器和操作系统)。在CPython中,每个Python线程都直接映射到一个OS线程,因此调度由OS控制。锁定/解锁也由操作系统处理,而不是由解释器处理。在Jython中,一切都在JVM下运行,JVM还将线程直接映射到本机线程。因此,我不知道Python解释器自己处理调度和锁定的任何实现。你知道吗

相关问题 更多 >

    热门问题