Python线程

时间:2011-04-14 07:25:22

标签: python multithreading python-3.x

嘿所有,我无法理解以下代码的某些部分(来自编程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.')

1 个答案:

答案 0 :(得分:0)

它基本上等待直到所有退出互斥锁都被锁定然后退出。

for mutex in exitmutexes:
    while not mutex.locked(): pass

此代码遍历退出互斥锁,并为每个互斥锁进入循环,等待互斥锁被锁定。

但是,它使用“主动等待”导致CPU使用率非常高(就像无限循环一样),这是一件非常糟糕的事情。