执行前显示的 Tqdm 状态栏

Tqdm status bar shown before executed

我有一个 tqdm 进度条:

print('foo')
for status in tqdm(cursor.items(count)):
    #process status
    pass

我在循环之前打印了一些消息,但进度条显示在它们之前。是否有任何类型的多线程或我该如何解决这个问题?

tqdm 在一个线程中工作(这很好,因为应用程序不会因为进度条而卡住)因此进度条显示在打印之前。

因为机器看到打印是一个 IO 操作,所以机器优先考虑 tqdm。

你需要在循环之前和之后睡觉。为此,请在循环前后使用 time.sleep(x)(x 以秒为单位) 来解决问题。请记住在代码开头使用 import time。尝试不同的 x 值,但只有 0.1 可能会正常工作。

问题是 print 默认打印到 sys.stdouttqdm by default prints to sys.stderr,这使得它们不同步。

您可以指定 file=sys.stdouttqdm 或指定 file=sys.sterrprint 以使两者打印到同一流,或者您可以调用 sys.stdout.flush 在每次调用 tqdm.

之前和 sys.stderr.flush 之后

我可以报告报告的几个解决方案如何在 Windows 10 上为我工作。我也遇到了 tqdm 的条形输出被 tqdm 之前执行的打印中断的问题。 对我有用的解决方案是

sys.stdout.flush()

没有的是

的印刷品
flush=True

我认为 sys.stdout.flush 是最好的,因为它正是需要完成的事情...需要刷新 stdout 上的输出,以便它在 tqdm 的 stderr 上的第一个输出之前完成...最基本的 I/O 个问题。

我喜欢这个小部件能够为原本无聊的 stdio 世界带来一点优雅。