tqdm详细教程,实现tqdm进度条完美设计;解决进度条多行一直刷新的问题;如何使得滚动条不上下滚动(保持一行内滚动)

一、tqdm简介

tqdm是一个python进度条库,可以在 Python长循环中添加一个进度提示信息。

请添加图片描述

二、3种使用方法

1.tqdm(range)-自动更新

import time
from tqdm import range


 
# 自动更新
for i in tqdm(range(10)): # 共可以更新10次进度条
    time. Sleep(0.5) # 每次更新间隔0.5s

range(10)意味着这里的进度条可以更新10次,由于这里是自动更新,所以一次循环就会更新进度条1,每次更新间隔0.5s。

2.trange()-自动更新

import time
from tqdm import trange
 
for i in trange(10):
    time.sleep(0.5)

请添加图片描述

这个的效果和方法1一样。

3.手动控制更新

from tqdm import tqdm
 
# 用with语句,进度条完成后会自动关闭
with tqdm(total=10) as pbar:
    for i in range(10):
        time. Sleep(0.5)
        pbar.update(1)
 
# 变量在外部创建,进度结束后手动关闭
phar = tqdm(total=100)
for i in range(100):
    time.sleep(0.1)
    phar.update(1)
phar.close()

这里的total=10意味着这里的进度条可以更新十次,由于这里是手动更新,需要使用update()方法,update(1)意味着每次更新进度1,每次更新间隔0.5s。

三、应用举例

以方法3在有关代码中的使用为例,其代码可以这样写:

# 开始训练
for epoch in range(num_epochs):
    train_l_sum, train_acc_sum, n, start = 0.0, 0.0, 0, time. Time()
    with tqdm(total=468, desc="Epoch: %d" % epoch) as pbar:
        for idx, (X, y) in enumerate(train_iter, 0):
            X = X.to(device)
            y = y.to(device)
            y_hat = net(X)
            l = loss(y_hat, y).sum()
            optimizer.zero_grad()
            l.backward()
            optimizer. Step()
            train_l_sum += l.item()
            train_acc_sum += (y_hat.argmax(dim=1) == y).float().sum().item()
            n += y.shape[0]
            pbar.update(1) # 更新一次进度1
        test_acc = evaluate_accuracy(test_iter, net)
        # 在进度条上显示有关信息
        pbar.set_postfix({
            'loss': '%.4f' % (train_l_sum / n),
            'train acc': '%.3f' % (train_acc_sum / n),
            'test acc': '%.3f' % test_acc ,
            'time': '%.1f time. Time.time() - start)
        })

请添加图片描述

四、多行更新滚动不一致

原来的代码

from tqdm import tqdm
import time
for i in tqdm(range(10000)):
    time.sleep(0.001)

原来的效果
讲解:多行滚动,虽然能记录下每次迭代的信息,但如果这些信息对你来说不重要,这种上下滚动方式比较annoying…

1%|▋ | 95/10000 [00:00<00:10, 945.58it/s

2%|█▎ | 190/10000 [00:00<00:10, 945.08it/

3%|█▊ | 283/10000 [00:00<00:10, 940.11it/

4%|██▍ | 378/10000 [00:00<00:10, 940.84it

优化后版本

from tqdm import tqdm
import time
for i in tqdm(range(10000), ncols=10): 
    time.sleep(0.001)

完美实现版本

from tqdm import trange
import time
iter = 100
with trange(iter , desc='Progress', unit='step', ncols=120) as pbar:
    for n in pbar: # 开始循环
        time.sleep(1)  # 这里是你的实现代码
        # pbar.set_description(f'Step-{simstep}: ')   # 这里可以实时更改进度条前面的说明
        pbar.set_postfix({
                'duration': '%.4fms' % (duration_step * 1000),
                'avg': '%.4fms' % ((sum(duration_list) / len(duration_list)) * 1000)
            })  # 实时更新进度条后面的说明
从你提供的代码片段来看,这段代码是用于启动一个基于 Flask 框架的 Web 应用。具体来说,它导入了一个名为 `app` 的对象,并在主程序中调用了 `app.run()` 方法来运行这个应用。 关于是否需要 MySQL,这取决于你的 Flask 应用的具体需求和功能。以下是一些可能的情况: 1. **需要 MySQL**: - 如果你的应用只是一个简单的静态网站或 API,涉及数据库操作,那么需要使用 MySQL。 - 例如,一个只返回静态页面或简单 JSON 数据的 Flask 应用需要数据库。 2. **需要 MySQL**: - 如果你的应用需要存储和管理数据,比如用户信息、产品列表等,那么你需要使用数据库。在这种情况下,MySQL 是一个常见的选择。 - 你可以通过 SQLAlchemy 或其他 ORM(对象关系映射)工具在 Flask 应用中集成 MySQL。 下面是一个简单的示例,展示如何在 Flask 应用中使用 SQLAlchemy 连接 MySQL 数据库: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/dbname' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) if __name__ == "__main__": app.run(host='0.0.0.0', port=5000, debug=True) ``` 在这个示例中,我们配置了 Flask 应用以连接到 MySQL 数据库,并定义了一个简单的 `User` 模型。 总结一下,是否需要 MySQL 取决于你的应用需求。如果需要存储和管理数据,那么就需要 MySQL;否则,可以需要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别出BUG求求了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值