gpt4 book ai didi

Python:标准输出率是应有值的两倍

转载 作者:行者123 更新时间:2023-12-01 02:54:53 25 4
gpt4 key购买 nike

我用 python 2.7 编写了一个非常简单的脚本,名为 Slowcat.py,它允许我 cat每秒具有一定字节率的文件。现在的问题是输出流上给定的速率加倍。因此,rate=1 字节导致每秒 2 字节,rate=4 字节导致每秒 8 字节。请参阅实际程序的代码片段:

#!/usr/bin/env python

import argparse
import time
import sys
import os


def get_configuration():
"""
Returns a populated configuration
"""
parser = argparse.ArgumentParser()
parser.add_argument('file', metavar='FILE', type=argparse.FileType('r'),
nargs='?', help="Input file")
parser.add_argument('--rate', type=int, default=666880,
help="Output rate in bytes per second")

return parser.parse_args()


def main():
cfg = get_configuration()

size = os.path.getsize(cfg.file.name)
bytes_read = 0

t1 = time.time()
while True:
n = min(cfg.rate, size-bytes_read)
if n <= 0:
break
buf = cfg.file.read(n)
sys.stdout.write(buf)
sys.stdout.flush()
bytes_read += n
t2 = time.time()
if t2-t1 < 1.0:
time.sleep(1.0 - (t2-t1))
t1 = t2


if __name__ == "__main__":
main()

现在我的问题是:为什么输出速率是我在命令行上传递的输出速率的两倍?如果您复制粘贴代码片段,您可以轻松地在您的系统上尝试它,例如python slowcat.py --rate 2 slowcat.py

最佳答案

问题在于 while 循环末尾的 t1 = t2。这会将 t1 设置为 sleep 延迟之前的时间,因此下次测试耗时间隔时,它将超过 1 秒,因此 sleep 调用将被跳过。

要修复此问题,请将最后一行更改为

t1 = time.time()

顺便说一句,使用新的 time.perf_counter() 可能更准确而不是 time.time()

关于Python:标准输出率是应有值的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com