执行前显示的Tqdm状态栏

时间:2017-01-30 15:45:25

标签: python tqdm

我有一个tqdm进度条:

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

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

3 个答案:

答案 0 :(得分:1)

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

当机器发现打印是IO动作时,机器优先考虑tqdm。

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

答案 1 :(得分:0)

问题是默认情况下print会在tqdm by default prints to sys.stderr时打印到sys.stdout,这会使它们失去同步。

您可以指定file=sys.stdouttqdm或指定file=sys.sterrprint以使两者都打印到相同的流,或者您可以先调用sys.stdout.flush每次致电sys.stderr.flush后{和tqdm

答案 2 :(得分:0)

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

sys.stdout.flush()

没有的是

的印刷品
flush=True

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

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