Python 执行前显示的Tqdm状态栏

Python 执行前显示的Tqdm状态栏,python,tqdm,Python,Tqdm,我有一个TQM进度条: print('foo') for status in tqdm(cursor.items(count)): #process status pass 我在循环之前打印了一些消息,但在它们之前显示了进度条。是否存在任何类型的多线程或如何解决此问题?TQM在线程中工作(这很好,因为应用程序不会因为进度条而卡住),因此在打印之前会显示进度条 当机器看到打印是IO操作时,机器会优先考虑TQM 你需要在循环前后睡觉。为此,请在循环前后使用time.sleep(x)

我有一个TQM进度条:

print('foo')
for status in tqdm(cursor.items(count)):
    #process status
    pass
我在循环之前打印了一些消息,但在它们之前显示了进度条。是否存在任何类型的多线程或如何解决此问题?

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

当机器看到打印是IO操作时,机器会优先考虑TQM


你需要在循环前后睡觉。为此,请在循环前后使用
time.sleep(x)
(x以秒为单位)停止问题。请记住在代码开始时导入时间。使用不同的x值进行实验,但仅0.1可能就可以了。

问题是,
print
默认情况下会在打印时打印到
sys.stdout
,这使得它们不同步


您可以将
file=sys.stdout
指定为
tqdm
,或将
file=sys.sterr
指定为
print
以使两个打印到同一个流,或者您可以在每次调用
tqdm
之前和之后调用
sys.stdout.flush
sys.stderr.flush
,我可以报告所报告的两个解决方案在Windows 10上是如何工作的。我也遇到了TQM的条输出被TQM之前执行的打印中断的问题。 对我有效的解决方案是

sys.stdout.flush()
其中一个没有被添加到

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


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

您也可以尝试使用print的
flush
关键字参数,强制显示为
print(“foo”,flush=True)
它似乎在windows上不起作用,但它比等待更优雅这并不是打印输出以错误顺序结束的原因,在某些情况下,休眠一段固定的时间可能仍然会失败,这取决于Python处理打印到终端的各种命令的速度(即使在这种休眠状态下可能会工作)。查看我的答案以获得一个解决方案,在该解决方案中,您不必使用
time.sleep
。将
flush=True
添加到我的打印语句时,此解决方案对我无效(我在windows上)