当我使用两个线程t1
和t2
从Internet抓取内容,并将一些过滤后的数据写入单个文件时,我使用Lock()实例来保证只有一个线程即写入文件。我所知道的是,当t1.aquire()
被调用时,t2.aquire()
会将t2
置于阻塞状态。
我想知道的是,现在在线程t2
的Python解释器中发生了什么。解释器会在每个时间段检查线程的状态吗?另外,解释器是控制分配给单个线程的CPU时间还是主机操作系统?
答案 0 :(得分:0)
任何系统调用都无法中断锁定的acquire()方法。
获取()
获取锁定,阻止或非阻止。
当不使用参数调用acquire时(考虑t1):如果此线程已拥有锁,则将递归级别递增一个,并立即返回。 否则,如果另一个线程拥有该锁,则阻塞直到锁被解锁。 锁解锁后(不属于任何线程),然后获取所有权,将递归级别设置为1,然后返回。 如果多个线程被阻塞等待锁解锁,则一次只能有一个线程获取锁的所有权。在这种情况下没有返回值。
答案 1 :(得分:0)
这个问题的答案是特定于实现的(即取决于解释器和操作系统)。在CPython中,每个Python线程都直接映射到OS线程,因此调度由OS控制。锁定/解锁也由OS处理,而不是解释器。在Jython中,一切都在JVM下运行,JVM也将线程直接映射到本机线程。所以我不知道Python解释器自己处理调度和锁定的任何实现。