您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么在循环使用睡眠时Python中的打印不会暂停?

为什么在循环使用睡眠时Python中的打印不会暂停?

print认情况下,在内部打印到sys.stdout并缓冲要打印的输出

通常是否由文件确定输出是否被缓冲,但是如果flush关键字参数为true,则将强制刷新流。

在版本3.3中更改:添加flush关键字参数

报价sys.stdout文件

交互式时,标准流是行缓冲的。否则,它们像常规文本文件一样被块缓冲。

因此,就您而言,您需要像这样显式刷新

import time
for i in range(10):
    print(i, flush=True)
    time.sleep(.5)

好的,这种缓冲存在很多困惑。让我尽可能多地解释。

首先,如果您在终端中尝试此程序,则认情况下它们会进行 (这基本上意味着,每当遇到换行符时,都将缓冲的数据发送到stdout)。因此,您可以像这样在Python 2.7中重现此问题

>>> import time
>>> for i in range(10):
...     print i,
...     time.sleep(.5)
...

在Python 3.x中

>>> for i in range(10):
...     print(i, end='')
...     time.sleep(.5)

我们通过end=''是因为,end\n,按照该print的文档

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

由于认设置end中断了行缓冲,因此数据将立即发送到stdout

重现此问题的另一种方法是将OP给出的实际程序存储在文件中,并使用Python 3.x解释器执行,您将看到stdout内部在缓冲数据并等待程序完成打印。

python 2022/1/1 18:33:43 有269人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶