执行前显示的 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.stdout
而 tqdm
by default prints to sys.stderr
,这使得它们不同步。
您可以指定 file=sys.stdout
到 tqdm
或指定 file=sys.sterr
到 print
以使两者打印到同一流,或者您可以调用 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 世界带来一点优雅。
我有一个 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.stdout
而 tqdm
by default prints to sys.stderr
,这使得它们不同步。
您可以指定 file=sys.stdout
到 tqdm
或指定 file=sys.sterr
到 print
以使两者打印到同一流,或者您可以调用 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 世界带来一点优雅。