python - Python线程

标签 python multithreading python-3.x

嘿,我无法理解以下代码的某些部分(从和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/

相关文章:

python - 如何在 Pandas 中同时突出显示一行和一列

python - 使用 lxml.cssselector 查找内联样式

线程中的 spring 安全当前用户

python - 我的计数器运行不正常

python - 尝试将分类数据转换为数字并运行 RandomForestClassifier

python - OpenCV 相机标定旋转 vector 到矩阵

python - pd to_datetime 不将 DDMMMYYYY 日期转换为 python 中的日期时间

java - 从不同线程更新 UI

java - 用于列出线程及其操作的最佳 Swing 容器?

python - 在groupby之后找到具有对应值的nlargest(2)