嘿所有,我无法理解以下代码的某些部分(来自编程Python Mark Lutz ):
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.')
答案 0 :(得分:0)
它基本上等待直到所有退出互斥锁都被锁定然后退出。
for mutex in exitmutexes:
while not mutex.locked(): pass
此代码遍历退出互斥锁,并为每个互斥锁进入循环,等待互斥锁被锁定。
但是,它使用“主动等待”导致CPU使用率非常高(就像无限循环一样),这是一件非常糟糕的事情。