第一次遇到刷新缓冲区延时

背景

  之前一直只是知道像 print 这样输出函数,存在一种可能,就是要打印的值还停留在缓冲区并没有被刷新到 std.out,这样我们在命令行中

  中看不到它的输出。   之前从来没有遇到过,而且还是可以稳定复现的那种。

看一下缓冲区刷新不及时的情况

import asyncio
import sys

async def main():
    print("hello ",end=‘ ‘)
    await asyncio.sleep(1)
    print("world")

if __name__ == "__main__":
    asyncio.run(main())

  上面代码的输出如下:

python3 main.py
hello  world

  重点是“hello”与“world”是同时出现的,也就是说“hello”先停在了缓冲区中,等到“world”这个词到来之后再一起刷出绥中区

看一下主动刷新缓冲区的情况

import asyncio
import sys

async def main():
    print("hello ",end=‘ ‘)
    sys.stdout.flush()
    await asyncio.sleep(1)
    print("world")

if __name__ == "__main__":
    asyncio.run(main())

  虽然输出还是“hello world” 但是可以明显的看到“world”是在“hello”出现后 1s 之后才出现的。

---

原文地址:https://www.cnblogs.com/JiangLe/p/10326637.html

时间: 2024-10-18 20:13:08

第一次遇到刷新缓冲区延时的相关文章

JavaSE8基础 OutputStreamWriter flush 写入字符后要刷新缓冲区

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) information: 工作空间的初始状态 code: package jizuiku0; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; /* * @version V17.09 */

c++中cout<<未刷新缓冲区及未遇endl便输出的问题

今天在mac的xcode上直接写cout<<未遇到enl以及未刷新缓冲区数据就不能输出. 记得以前在vs以及g++上都会直接输出,之后查阅的c++输入输出缓冲区刷新的问题,解决了这个矛盾. 缓冲区清空的情况: 1.程序正常结束.作为main返回工作的一部分,将清空所有的输出缓冲区. 2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新. 3.用操纵符显示地刷新缓冲区,如用endl. 4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清

10 python从键盘获取输入、刷新缓冲区

1 ---python从键盘获取输入有两种方法: 2 3 4 input与raw_input比较: 5 6 #1.input函数:需要以合法的python表达式形式输入 7 8 例1: 9 >>> name = input ("what is your name ?") 10 what is your name ? 11 12 当输入为数值型:3时,通过:当输入为字符型:lucy时,抱错: 13 14 例2: 15 str = input("Enter yo

C语言刷新缓冲区(转载)

C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 char *fgets(char * restrict s, int n, FILE * restrict stream); char *gets(char *s);//可能导致溢出,用fgets代替之. //格式化输入系列 int fscanf(FILE * restrict stream, co

printf()刷新缓冲区

看到一个关于fork()的题目(来源于:https://mp.weixin.qq.com/s/MsGeaWNmSVOCT7kXFrQm_g),如下: #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-"); } wait(NULL); wait(NUL

c刷新缓冲区

int c; while((c = getchar()) != '\n' && c != EOF);

PHP IIS 环境 ob_flush()刷新缓冲区执行完才显示 解决办法,iis缓冲区原因

找到C:\Windows\System32\inetsrv\config\applicationHost.config 文件: 找到这段代码 <handlers accessPolicy="Read, Script"> 找到<add name="PHP" path="*.php" ................................... 在结束标签前添加代码 responseBufferLimit="0&

C++输入输出缓冲区的刷新问题

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起.这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介.例如,对于一个输出流, 每次成员函数put  (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中. 当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话).这个过程

关于header(&#39;location:url&#39;)的一些说明,php缓冲区

关于header('location:url')的一些说明,php缓冲区 网上搜索header('location:url')的用法,得到如下三个结论: 1. location和":"号间不能有空格,否则会出错. 2. 在用header前不能有任何的输出. 3. header后的PHP代码还会被执行.(可使用exit('...')中断执行). 经试验,第一条和第三条没有问题.第三条验证方法可用 file_put_contents()函数. 关键是第二条,php官方说明里也有提到这条,但