嘿,我无法理解以下代码的某些部分(从和Markt Lutz 编写的编程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.')
最佳答案
它基本上等待直到所有退出互斥锁都被锁定,然后退出。
for mutex in exitmutexes:
while not mutex.locked(): pass
此代码遍历导出互斥对象,并为每个互斥对象进入一个循环,等待互斥对象被锁定。
但是,它使用“主动等待”会导致很高的CPU使用率(如无所事事的无限循环),这是一件非常糟糕的事情。
关于python - Python线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659923/