IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 100个Python实战项目(十二)Python 并发图像下载器 -> 正文阅读

[Python知识库]100个Python实战项目(十二)Python 并发图像下载器

本文首发于海拥资源网:https://code.haiyong.site/542/

毫无疑问,多线程优势的一个很好的例子是使用多线程来下载多个图像或文件。实际上,由于 I/O 的阻塞特性,这是多线程的最佳用例之一。

我们将从 https://picsum.photos/200/300 检索 10 张不同的图像,这是一个免费的 API,每次点击该链接时都会提供不同的图像。然后,我们会将这 10 个不同的图像存储在一个临时文件夹中。

并发下载

是时候编写一个快速程序来同时下载我们需要的所有图像了。我们将讨论创建和启动线程。这样做的关键是通过同时编写程序来实现潜在的性能提升:

import threading
import urllib.request
import time

def downloadImage(imgPath, fileName):
    print("Downloading Image from ", imgPath)
    urllib.request.urlretrieve(imgPath, fileName)
    print("Completed Download")

def createThread(i,url):
    imgName = "temp/image-" + str(i) + ".jpg"
    downloadImage(url,imgName)

def main():
    url = "https://picsum.photos/200/300"
    t = time.time()
    # 创建一个数组,它将存储对所有线程的引用
    threads = []

    # 创建 10 个线程,将它们附加到我们的线程数组中并启动它们
    for i in range(10):
        thread = threading.Thread(target=createThread, args=(i,url,))
        threads.append(thread)
        thread.start()

    # 在记录完成的总时间之前,确保阵列中的所有线程都已完成其执行
    for i in threads:
        i.join()

    # 计算总执行时间
    t1 = time.time()
    totalTime = t - t1
    print("Total Execution Time {}".format(totalTime))

if __name__ == '__main__':
    main()

在我们新修改的程序的第一行,您应该看到我们现在正在导入线程模块。然后我们抽象我们的文件名生成,将 downloadImage 函数调用到我们自己的 createThread 函数中。

在 main 函数中,我们首先创建一个空的线程数组,然后迭代 10 次,创建一个新的线程对象,将其附加到我们的线程数组中,然后启动该线程。

最后,我们通过在线程中调用 i 来遍历我们的线程数组,并在每个线程上调用 join 方法。这确保了在所有线程完成下载图像之前,我们不会继续执行剩余的代码。

如果您在您的机器上执行此操作,您应该会看到它几乎立即开始下载 10 个不同的图像。下载完成后,它再次打印出它已成功完成,您应该会看到临时文件夹中填充了这些图像。

$ concurrentImageDownloader.py
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Downloading Image from  https://picsum.photos/200/300
Completed Download
Completed Download
Completed Download
Completed Download
Completed Download
Completed Download
Completed Download
Completed Download
Completed Download
Completed Download
Total Execution Time -1.1606624126434326

?? 好书推荐

《从零开始利用Excel与Python进行数据分析》

在这里插入图片描述

【内容简介】

120多个真实办公场景数据分析实战案例,助你低门槛高效率,从零开始自动化办公实战,本书系统讲解了数据分析自动化办公全流程。笔者者8年数据分析经验无保留呈现。层层深入,基于3套框架方法,层层剥茧式讲解。

📚 京东自营购买链接:《从零开始利用Excel与Python进行数据分析》

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:52:04  更:2022-10-31 11:53:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 3:29:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计