python的print(flush=True)实现动态loading......效果

python的print(flush=True)实现动态Loading......效果

import time                                                                           
print("Loading",end = "")
for i in range(6):
    print(".",end = '')
    time.sleep(0.2)

想用以上代码实现下面动图效果,即:在Loading同一行后面每0.2秒输出1个点号,总共6个。
可是上面代码效果是;6x0.2秒后1次性输出Loading……
百度了下相关问题,综合网友的回答。问题出在:上面那样循环会堵塞输出,要等sleep全部执行完,才一并打印出全部结果。要在for循环里面的end = ""后面加上flush = True,即:

import time                                                                           
print("Loading",end = "")
for i in range(6):
    print(".",end = '',flush = True)
    time.sleep(0.2)

终于实现了下面效果。(虽然只能动态逐个输出6个点号1次,不是一直循环下去,不过核心问题算是解决了)
在这里插入图片描述
我们查看下help里面写的print

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    ...省略...
    flush: whether to forcibly flush the stream.

有个参数flush,默认为False。那么这个参数是干什么用的?并且是怎么用的?
在这里插入图片描述
举个例子:
在线web聊天,页面会实时显示聊天的内容, 其实后台是一直在向服务器请求数据的, 正常情况下是请求完毕之后才会输出相应内容, 但是即时聊天,需要一有响应就得立即返回, flush也就起作用了。

再举个例子
我们知道print也可输出到文件。在python3 交互模式中输入:

f = open("123.txt", "w")
print("123456789", file = f)

运行后打开123.txt文件,发现“123456789”未被写入,文件内容为空。只有f.close()后才将内容写进文件中。如果加入flush = True,即上面代码改为:

f = open("123.txt", "w")
print("123456789",file = f, flush = True)

不用f.close()即可将内容写进文件中
flush参数主要是刷新, 默认flush = False,不刷新,如上面例子,print到f中的内容先存到内存中,当文件对象关闭时才把内容输出到 123.txt 中;而当flush = True时它会立即把内容刷新存到 123.txt 中。

初学python,发文只当作笔记,如果有什么问题欢迎指正

  • 62
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
以下是一个flume的conf文件,请帮我逐行解释一下代码:“#定义三大组件的名称 a.sources = r a.sinks = k1 k2 k3 a.channels = c1 c2 c3 #将数据流复制给所有channel a.sources.r.selector.type = replicating  # 配置Source组件 a.sources.r.type = exec a.sources.r.command = cat /home/bit/novel/novel.csv # kafka a.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink a.sinks.k1.kafka.topic = data a.sinks.k1.kafka.bootstrap.servers = localhost:9092 a.sinks.k1.kafka.flumeBatchSize = 20 a.sinks.k1.kafka.producer.acks = 1 a.sinks.k1.kafka.producer.linger.ms = 1 a.sinks.k1.kafka.producer.compression.type = snappy a.channels.c1.type = memory a.channels.c1.capacity = 100000 a.channels.c1.transactionCapacity = 100 # mysql a.sinks.k2.type =com.us.flume.MysqlSink a.sinks.k2.hostname=localhost a.sinks.k2.port=3306 a.sinks.k2.databaseName=novel a.sinks.k2.tableName=table1 a.sinks.k2.user=bit a.sinks.k2.password=123456 a.channels.c2.type = memory a.channels.c2.capacity = 100000 a.channels.c2.transactionCapactiy = 2000 # hdfs a.sinks.k3.type = hdfs a.sinks.k3.hdfs.path = hdfs://localhost:9000/user/bit/novel #积攒多少个Event才flush到HDFS一次 a.sinks.k3.hdfs.batchSize = 100 #设置文件类型,可支持压缩 a.sinks.k3.hdfs.fileType = DataStream #多久生成一个新的文件 a.sinks.k3.hdfs.rollInterval = 5 a.channels.c3.type = memory a.channels.c3.capacity =100000 a.channels.c3.transactionCapacity = 100 # Bind the source and sink to the channel a.sources.r.channels = c1 c2 c3 a.sinks.k1.channel = c1 a.sinks.k2.channel = c2 a.sinks.k3.channel = c3”
05-24
这个conf文件是用来配置Apache Flume进行数据采集、传输和存储的。下面是每一行代码的解释: ``` #定义三大组件的名称 a.sources = r a.sinks = k1 k2 k3 a.channels = c1 c2 c3 ``` 这三行代码定义了三个组件的名称,分别是源(source)、汇(sink)和通道(channel),这些名称将在接下来的配置中被用到。 ``` #将数据流复制给所有channel a.sources.r.selector.type = replicating ``` 这行代码配置了源组件的复制策略,即数据流将会被复制到所有的通道中。 ``` # 配置Source组件 a.sources.r.type = exec a.sources.r.command = cat /home/bit/novel/novel.csv ``` 这两行代码配置了源组件的类型和命令。这里使用的是exec类型的源组件,它会执行一个命令,这个命令将会输出一些数据,这些数据将会被Flume采集并传输到汇组件。 ``` # kafka a.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink a.sinks.k1.kafka.topic = data a.sinks.k1.kafka.bootstrap.servers = localhost:9092 a.sinks.k1.kafka.flumeBatchSize = 20 a.sinks.k1.kafka.producer.acks = 1 a.sinks.k1.kafka.producer.linger.ms = 1 a.sinks.k1.kafka.producer.compression.type = snappy ``` 这些代码配置了一个Kafka的汇组件,它将数据发送到一个名为"data"的Kafka主题中。其中kafka.bootstrap.servers指定了Kafka的服务器地址和端口,kafka.flumeBatchSize指定了每个批次发送的事件数量,producer.acks指定了要求的确认级别,producer.linger.ms指定了等待确认的时间,producer.compression.type指定了压缩方式。 ``` a.channels.c1.type = memory a.channels.c1.capacity = 100000 a.channels.c1.transactionCapacity = 100 ``` 这些代码配置了一个类型为内存的通道,它的容量为100000个事件,事务容量为100个事件。 ``` # mysql a.sinks.k2.type =com.us.flume.MysqlSink a.sinks.k2.hostname=localhost a.sinks.k2.port=3306 a.sinks.k2.databaseName=novel a.sinks.k2.tableName=table1 a.sinks.k2.user=bit a.sinks.k2.password=123456 a.channels.c2.type = memory a.channels.c2.capacity = 100000 a.channels.c2.transactionCapactiy = 2000 ``` 这些代码配置了一个MySQL的汇组件,它将数据写入到一个名为"table1"的表中。其中hostname指定了MySQL服务器的地址,port指定了端口号,databaseName指定了数据库名称,user和password指定了登录信息。 ``` # hdfs a.sinks.k3.type = hdfs a.sinks.k3.hdfs.path = hdfs://localhost:9000/user/bit/novel a.sinks.k3.hdfs.batchSize = 100 a.sinks.k3.hdfs.fileType = DataStream a.sinks.k3.hdfs.rollInterval = 5 a.channels.c3.type = memory a.channels.c3.capacity =100000 a.channels.c3.transactionCapacity = 100 ``` 这些代码配置了一个HDFS的汇组件,它将数据写入到HDFS中的一个目录中。其中hdfs.path指定了HDFS的地址和目录,hdfs.batchSize指定了每个批次发送的事件数量,hdfs.fileType指定了文件类型,hdfs.rollInterval指定了多久生成一个新的文件。 ``` # Bind the source and sink to the channel a.sources.r.channels = c1 c2 c3 a.sinks.k1.channel = c1 a.sinks.k2.channel = c2 a.sinks.k3.channel = c3 ``` 这些代码将源组件和汇组件分别绑定到相应的通道上。也就是说,源组件从c1、c2、c3中采集数据,并将数据发送到k1、k2、k3中去。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值