如何每秒打印迭代次数?

use*_*551 6 python performance loops cmd progress

我有一个小的Python脚本,它将POST请求发送到服务器并获得它们的响应.

它迭代10000次,我设法使用以下命令在命令提示符中打印当前进度:

code=current_requestnumber
print('{0}/{1}'.format(str(code),"10000"),end="\r")
Run Code Online (Sandbox Code Playgroud)

在每个循环结束时.

因为这涉及与网络服务器的交互,我想显示当前的平均速度(每2秒更新一次).

命令提示符底部的示例如下:

(1245/10000),6.3次/秒

我该如何实现这一目标?

小智 12

您可以tqdm为此使用库。一个简单的例子是

from tqdm import tqdm
for i in tqdm(range(1e20)):
    ##LOOP BODY
Run Code Online (Sandbox Code Playgroud)

这将打印当前迭代、迭代/秒、ETA 和一个不错的进度条

例如

 21%|????????????????????  21/100 [01:45<04:27,  3.39s/it]

Run Code Online (Sandbox Code Playgroud)


And*_*bis 8

您可以像这样获得每秒的总平均事件数:

#!/usr/bin/env python3

import time
import datetime as dt

start_time = dt.datetime.today().timestamp()
i = 0
while(True):
    time.sleep(0.1)
    time_diff = dt.datetime.today().timestamp() - start_time
    i += 1
    print(i / time_diff)
Run Code Online (Sandbox Code Playgroud)

在这个例子中打印大约10个.请注意我使用的timestamp方法datetime只能在Python 3中使用.

现在,如果你想计算每秒事件的"当前"数量,比如过去10个事件,你可以这样做:

#!/usr/bin/env python3

import time
import datetime as dt

last_time = dt.datetime.today().timestamp()
diffs = []
while(True):
    time.sleep(0.1)

    # Add new time diff to list
    new_time = dt.datetime.today().timestamp()
    diffs.append(new_time - last_time)
    last_time = new_time

    # Clip the list
    if len(diffs) > 10:
        diffs = diffs[-10:]

    print(len(diffs) / sum(diffs))
Run Code Online (Sandbox Code Playgroud)

在这里,我将保留最后10次迭代的持续时间列表,然后我可以使用它来获取每秒的平均事件数.