了解 tqdm 中进度条更新的线程行为

问题描述 投票:0回答:1

我正在使用 Python 中的

tqdm
库在嵌套循环结构中更新进度条。我注意到进度条更新中的异常行为,我试图了解
tqdm
如何管理这些更新的线程(或子进程)。我关心的是
tqdm
是否使用单独的线程进行进度条更新以及它如何与嵌套循环中的标准打印语句交互。

这是我的代码的简化版本:

from tqdm import trange

def main():
    X = 100
    for i in trange(X):
        print(i)
        for j in range(X):
            print(j)
            k = j * i
    print("Done🛠️")

    return 0

if __name__ == '__main__':
    main()

当我运行此代码时,我观察到直到执行结束才打印来自

tqdm
的进度条更新。这是我得到的输出片段:

[Output Snippet]
...
Done🛠️
100%|██████████| 100/100 [00:00<00:00, 3561.95it/s]

我的问题是:

  1. tqdm
    是否使用单独的线程或子进程来更新进度条?
  2. 当存在包含 print 语句的嵌套循环时,
    tqdm
    如何处理进度条更新?
python multithreading console progress-bar tqdm
1个回答
0
投票

回答您的问题:

  1. 我不相信

    tqdm
    会创建任何线程来更新进度条。如果确实如此,为什么它很重要?

  2. 如果您按照我的建议重新运行代码,您现在就知道

    tqdm
    如何与
    print
    调用一起工作,也就是说,不是很好。尝试使用
    tqdm.write
    代替:

from tqdm import tqdm, trange
import time

def main():
    for i in trange(100, position=0):
        tqdm.write(str(i))
        time.sleep(.1)
    print("Done🛠️")

if __name__ == '__main__':
    main()
© www.soinside.com 2019 - 2024. All rights reserved.