Python 多线程
大家好,我对以下代码的一部分有点搞不懂(来自Mark Lutz的Programming Python):
import _thread as thread
stdoutmutex = thread.allocate_lock()
exitmutexes = [thread.allocate_lock() for i in range(10)]
def counter(myId, count):
for i in range(count):
stdoutmutex.acquire()
print('[%s] => %s' % (myId, i))
stdoutmutex.release()
exitmutexes[myId].acquire()
# signal main thread
for i in range(10):
thread.start_new_thread(counter, (i, 100))
for mutex in exitmutexes:
while not mutex.locked(): pass
print('Main thread exiting.')
我在用Python3。关于stdoutmutex的东西我能理解它是怎么工作的,但我不太明白上面的代码是怎么处理exitmutexes这个列表的,因为exitmutexes里的每个锁都已经被获取了,但并没有被释放。一旦所有10个线程都启动了,下面的3行是怎么工作的呢?作者把这个描述为一种不使用time.sleep()的方法。
for mutex in exitmutexes:
while not mutex.locked(): pass
print('Main thread exiting.')
1 个回答
0
这个代码的主要功能是等到所有的退出互斥锁都被锁定了,然后才退出。
for mutex in exitmutexes:
while not mutex.locked(): pass
这段代码会遍历所有的退出互斥锁,对于每一个互斥锁,它会进入一个循环,等待这个互斥锁被锁定。
不过,它使用的是“主动等待”,这会导致CPU的使用率非常高(就像是一个无休止的循环在那儿干等着),这其实是个很糟糕的做法。