使用Python实现带进度条的异步多文件下载器

 更新时间:2025年11月26日 09:46:17   作者:weixin_46244623  
本文详细介绍了如何使用 Python + asyncio + aiohttp + tqdm 实现一个 带进度条的异步多文件下载器,文中的示例代码讲解详细,有需要的可以了解下

摘要

本文详细介绍了如何使用 Python + asyncio + aiohttp + tqdm 实现一个 带进度条的异步多文件下载器。相比传统的同步下载方式,异步下载不仅能够显著提高下载速度,还能在终端显示每个文件的实时下载进度条,适用于大文件、多文件并发下载等场景。文章提供了详细中文注释的完整代码示例,读者可以直接拷贝运行。同时也介绍了核心原理、依赖库、适用场景等内容,非常适合学习 Python 异步 IO 编程的开发者参考。

使用的库说明

  • asyncio:Python 内置的异步协程库,用于并发执行任务。
  • aiohttp:支持用于异步 HTTP 请求,比 requests 更适合同步下载。
  • tqdm:终端显示进度条的工具。

安装依赖:

pip install aiohttp tqdm

异步下载的优势

无需多线程,也能同时下载多个文件

避免同步阻塞,大幅提升下载速度

每个任务都能显示独立进度条

核心思路

使用 aiohttp.ClientSession() 进行异步请求

使用 await response.content.read(1024) 异步读取内容

使用 tqdm 显示进度条

使用 asyncio.gather() 并发执行多个下载任务

适用场景

下载多个大文件(Zip、MP4、模型文件等)

写爬虫批量下载文件

后台批处理任务

分布式下载系统

完整代码

import aiohttp
import asyncio
from tqdm import tqdm

# 异步下载函数
async def download_file(url, destination):
    """
    异步下载文件并显示下载进度条

    :param url:          文件下载地址
    :param destination:  本地保存文件路径
    """
    # 创建 aiohttp 会话
    async with aiohttp.ClientSession() as session:
        # 发送 GET 请求
        async with session.get(url) as response:
            # 获取文件总大小(如果服务器支持)
            total_size = int(response.headers.get("Content-Length", 0))

            # 打开本地文件,准备写入下载内容
            with open(destination, "wb") as f:
                # tqdm 进度条
                progress_bar = tqdm(
                    total=total_size,         # 总大小
                    unit="B",                 # 单位:字节
                    unit_scale=True,          # 自动转换 KB / MB
                    desc=f"下载中: {destination}"  # 显示的标题
                )

                # 持续读取数据(每次读取 1024 字节)
                while True:
                    chunk = await response.content.read(1024)
                    if not chunk:   # 读取完毕
                        break
                    f.write(chunk)
                    progress_bar.update(len(chunk))  # 更新进度条

                progress_bar.close()  # 下载完成后关闭进度条


# 主异步函数
async def main():
    """
    批量创建多个下载任务,并异步并发执行
    """

    # 要下载的文件列表(可自行扩展)
    download_tasks = [
        {
            "url": "http://example.com/file1.zip",
            "destination": "file1.zip"
        },
        {
            "url": "http://example.com/file2.zip",
            "destination": "file2.zip"
        },
        # 可以继续添加更多文件
    ]

    # 为每个任务创建一个 download_file 协程
    tasks = [
        download_file(task["url"], task["destination"])
        for task in download_tasks
    ]

    # 并发执行所有下载任务
    await asyncio.gather(*tasks)


# 程序入口
if __name__ == "__main__":
    # 运行异步主函数
    asyncio.run(main())

以上就是使用Python实现带进度条的异步多文件下载器的详细内容,更多关于Python带进度条的文件下载器的资料请关注脚本之家其它相关文章!

相关文章

  • 时间序列预测中的数据滑窗操作实例(python实现)

    时间序列预测中的数据滑窗操作实例(python实现)

    滑动窗口操作非常普遍,非常有用,它们也很容易在Python中实现,下面这篇文章主要给大家介绍了关于时间序列预测中的数据滑窗操作python实现的相关资料,需要的朋友可以参考下
    2022-03-03
  • 使用Python调用大模型(LLM)的四种方式汇总

    使用Python调用大模型(LLM)的四种方式汇总

    随着大语言模型(LLM)在各类任务中的强大表现,越来越多的开发者和研究人员希望将这些模型集成到自己的工作流程或产品中,Python 作为最主流的 AI 开发语言,提供了丰富的生态工具,能够灵活、高效地调用各类大模型,本文分析了四种不同的LLM API调用脚本
    2025-09-09
  • python的函数参数你了解吗

    python的函数参数你了解吗

    这篇文章主要为大家详细介绍了python的函数参数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python+Pygame实现海洋之神大冒险游戏

    Python+Pygame实现海洋之神大冒险游戏

    这篇文章主要介绍了如何利用Python+Pygame自制一个海洋之神大冒险游戏。规则是在海里收集鱼骨头,有些鱼骨头可以转化为武器,用来攻击敌人,感兴趣的可以了解一下
    2022-08-08
  • Jinja2过滤器的使用、控制语句示例详解

    Jinja2过滤器的使用、控制语句示例详解

    在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现,这篇文章主要介绍了Jinja2过滤器的使用、控制语句,需要的朋友可以参考下
    2023-03-03
  • 使用Python和OpenCV进行图像处理和分析

    使用Python和OpenCV进行图像处理和分析

    图像处理和分析是计算机视觉领域的重要组成部分,本文将介绍如何使用Python编程语言和OpenCV库进行图像处理和分析,我们将涵盖图像读取、显示、滤波、边缘检测和图像分割等常见的图像处理操作,并提供相应的代码示例
    2023-07-07
  • Python利用遗传算法探索迷宫出路实例深究

    Python利用遗传算法探索迷宫出路实例深究

    当处理迷宫问题时,遗传算法提供了创新的解决方案,本文将深入探讨如何运用Python和遗传算法来解决迷宫问题,这是一个经典的寻路问题,寻找从起点到终点的最佳路径,遗传算法是一种启发式优化方法,适用于解决复杂问题,其中个体进化和自然选择的概念被用于寻找最优解
    2023-12-12
  • Python3中类、模块、错误与异常、文件的简易教程

    Python3中类、模块、错误与异常、文件的简易教程

    这篇文章主要给大家介绍了关于Python3中类、模块、错误与异常、文件的相关教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Python浅析多态与鸭子类型使用实例

    Python浅析多态与鸭子类型使用实例

    python是一门解释语言,但是同java等静态语言一样,是可以通过继承的方式实现多态。而且python还有一个自己的特殊实现多态的方法,就是通过鸭子类型,来实现多态
    2022-10-10
  • Python基础中的的if-else语句详解

    Python基础中的的if-else语句详解

    这篇文章主要为大家详细介绍了Python基础中的的if-else语句,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论