tqdm:迭代的简单循环,显示 MB/s
tqdm: simple loop on iterations, show MB/s
问题
我想在 n
次迭代中做一个简单的循环。每次迭代都包含一个复制操作,我知道复制了多少字节。我的问题是:如何在进度条中也显示 MB/s 的数量?
例子
我在 rsync
附近显示进度条。我修改了this answer如下:
import subprocess
import sys
import re
import tqdm
n = len(open('myfiles.txt').readlines())
your_command = 'rsync -aP --files-from="myfiles.txt" myhost:mysource .'
pbar = tqdm.trange(n)
process = subprocess.Popen(your_command, stdout=subprocess.PIPE, shell=True)
for line in iter(process.stdout.readline, ''):
line = line.decode("utf-8")
if re.match(r'(.*)(xfr\#)([0-9])(.*)(to\-chk\=)([0-9])(.*)', line):
pbar.update()
其中 myfiles.txt
包含文件列表。这给了我一个很好的进度条,显示每秒的迭代次数。
但是,我匹配的摘要行表示文件已被复制,例如
682,356 100% 496.92kB/s 0:00:01 (xfr#5, to-chk=16756/22445)
还包含复制的字节数,我想用它来显示复制速度。
下面我提供了您需要的代码。
因为我没有您的示例数据,所以我创建了简单的生成器函数来模拟检索数据的过程。它在随机时间点(每次迭代)生成等于随机字节数(不是兆字节)的值。
下面有两个 tqdm
条,一个用于进度,它测量每秒的迭代次数以及完成的迭代总数和百分比。第二个条形图以每秒兆字节数和接收的兆字节总数为单位测量速度。
import tqdm
def gen(cnt):
import time, random
for i in range(cnt):
time.sleep(random.random() * 0.125)
yield random.randrange(1 << 20)
total_iterations = 150
pbar = tqdm.tqdm(total = total_iterations, ascii = True)
sbar = tqdm.tqdm(unit = 'B', ascii = True, unit_scale = True)
for e in gen(total_iterations):
pbar.update()
sbar.update(e)
输出:
9%|█████████▉ | 89/1000 [00:11<01:53, 8.05it/s]
40.196MiB [00:11, 3.63MiB/s]
ASCII 视频 (+link):
问题
我想在 n
次迭代中做一个简单的循环。每次迭代都包含一个复制操作,我知道复制了多少字节。我的问题是:如何在进度条中也显示 MB/s 的数量?
例子
我在 rsync
附近显示进度条。我修改了this answer如下:
import subprocess
import sys
import re
import tqdm
n = len(open('myfiles.txt').readlines())
your_command = 'rsync -aP --files-from="myfiles.txt" myhost:mysource .'
pbar = tqdm.trange(n)
process = subprocess.Popen(your_command, stdout=subprocess.PIPE, shell=True)
for line in iter(process.stdout.readline, ''):
line = line.decode("utf-8")
if re.match(r'(.*)(xfr\#)([0-9])(.*)(to\-chk\=)([0-9])(.*)', line):
pbar.update()
其中 myfiles.txt
包含文件列表。这给了我一个很好的进度条,显示每秒的迭代次数。
但是,我匹配的摘要行表示文件已被复制,例如
682,356 100% 496.92kB/s 0:00:01 (xfr#5, to-chk=16756/22445)
还包含复制的字节数,我想用它来显示复制速度。
下面我提供了您需要的代码。
因为我没有您的示例数据,所以我创建了简单的生成器函数来模拟检索数据的过程。它在随机时间点(每次迭代)生成等于随机字节数(不是兆字节)的值。
下面有两个 tqdm
条,一个用于进度,它测量每秒的迭代次数以及完成的迭代总数和百分比。第二个条形图以每秒兆字节数和接收的兆字节总数为单位测量速度。
import tqdm
def gen(cnt):
import time, random
for i in range(cnt):
time.sleep(random.random() * 0.125)
yield random.randrange(1 << 20)
total_iterations = 150
pbar = tqdm.tqdm(total = total_iterations, ascii = True)
sbar = tqdm.tqdm(unit = 'B', ascii = True, unit_scale = True)
for e in gen(total_iterations):
pbar.update()
sbar.update(e)
输出:
9%|█████████▉ | 89/1000 [00:11<01:53, 8.05it/s]
40.196MiB [00:11, 3.63MiB/s]
ASCII 视频 (+link):