项目场景:
我们在使用docker部署flask的时候,需要使用docker logs -f mycontainer
进行调试,但是控制台却不是实时输出的结果。
原因分析:
提示:这里填写问题的分析:
例如:Handler
发送消息有两种方式,分别是 Handler.obtainMessage()
和 Handler.sendMessage()
,其中 obtainMessage
方式当数据量过大时,由于 MessageQuene
大小也有限,所以当 message
处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
解决方案:
提示:因为Python有控制台的缓存机制
python中标准错误(std.err)和标准输出(std.out)的输出规则:
- 标准输出默认需要缓存后再输出到屏幕。
- 标准错误则直接打印到屏幕。
例如test.py
import sys
sys.stdout.write("a")
sys.stderr.write("b")
sys.stdout.write("a")
sys.stderr.write("b")
无论运行多少次都是输出
CMD>python test.py
bbaa
原因是python缓存机制,虽然stderr和stdout默认都是指向屏幕的,但是stderr是无缓存的,程序往stderr输出一个字符,就会在屏幕上显示一个。而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。
python会默认缓冲其输出,所以想要无缓冲输出,那么加一个“-u” 参数即可:
python -u test.py