Python学习---基于多任务协程的并发下载器案例

目标:使用协程实现网络图片的下载(适合网络io)

多进程:
密集CPU任务,需要充分使用多核CPU资源(服务器,大量的并行计算)的时候,用多进程。
缺陷:多个进程之间通信成本高,切换开销大。
多线程:
密集I/O任务(网络I/O,磁盘I/O,数据库I/O)使用多线程合适。
缺陷:同一个时间切片只能运行一个线程,不能做到高并行,但是可以做到高并发。
协程:
当程序中存在大量不需要CPU的操作时(IO),适用于协程;

import urllib.request
import os
import gevent
from gevent import monkeymonkey.patch_all()# 获取当前工作目录
current_dir = os.getcwd()
# 图片文件夹名称
image_folder_name = "images"
# 构建图片文件夹的完整路径
image_folder_path = os.path.join(current_dir, image_folder_name)
# 如果图片文件夹不存在,创建它
if not os.path.exists(image_folder_path):os.makedirs(image_folder_path)# 文件下载函数
def download_img(imgUrl, file_name):try:# 图片的完整保存路径image_path = os.path.join(image_folder_path, file_name)# 1、根据url地址请求网络资源response_data = urllib.request.urlopen(imgUrl)# 2、在本地创建文件,准备保存with open(image_path, "wb") as file:while True:# 3、读取网络资源数据 (循环)file_data = response_data.read(1024)# 读取数据不为空时再写入if file_data:# 4、把读取的网络资源写入到本地文件中file.write(file_data)else:breakprint(f'图片已保存至:{image_path}')# 5、做异常捕获except Exception as e:print("执行错误!!!")def main():# 1、定义要下载的图片路径img_url1 = "https://science.nasa.gov/wp-content/uploads/2023/09/Tycho-1.jpeg"img_url2 = "https://science.nasa.gov/wp-content/uploads/2023/09/Carina_Nebula-1.jpeg"img_url3 = "https://science.nasa.gov/wp-content/uploads/2023/09/The_Helix_Nebula-1.jpeg"# 2、调用文件下载的函数,专门下载文件# download_img(img_url1, "图片一.jpeg")# download_img(img_url2, "图片二.jpeg")# download_img(img_url3, "图片三.jpeg")g1 = gevent.spawn(download_img, img_url1, "图片一.jpeg")g2 = gevent.spawn(download_img, img_url2, "图片二.jpeg")g3 = gevent.spawn(download_img, img_url3, "图片三.jpeg")gevent.joinall([g1, g2, g3])if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础学习笔记(六)——列表

目录 一维列表1. 索引的查询与返回2. 切片3. 添加元素4. 删除元素5. 更改元素6. 排序7. 生成式 一维列表 列表,也称数组,是一种有序、可变、允许重复元素的组合数据结构,属于可变序列,由方括号[]内、用逗号分隔的一组元素组成。 列…

【Clickhouse】DB::Exception: Table is in readonly mode问题解决

1. 问题描述 公司电力检修&#xff0c;机房断电再上电之后clickhouse的一张表出现了只读现象 2024.05.20 16:58:08.702472 [ 173655 ] {17C25AD8068BBE9A} <Error> executeQuery: Code: 242, e.displayText() DB::Exception: Table is in readonly mode (version 20.5…

展现金融科技前沿力量,ATFX于哥伦比亚金融博览会绽放光彩

不到半个月的时间里&#xff0c;高光时刻再度降临ATFX。而这一次&#xff0c;是ATFX不曾拥有的桂冠—“全球最佳在线经纪商”(Best Global Online Broker)。2024年5月15日至16日&#xff0c;拉丁美洲首屈一指的金融盛会—2024年哥伦比亚金融博览会(Money Expo Colombia 2024) 于…

【华为OD机试-C卷D卷-200分】文本统计分析(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 有一个文件,包含以一定规则写作的文本,请统计文件中包含的文本数量。 规则如下: 文本以 ";" 分隔,最后一条可以没有 ";" ,但空文本不能算…

数据对大模型预训练效果的影响

文章目录 数据数量的影响数据质量的影响数据集污染数据预处理实践 在训练大语言模型的过程中&#xff0c;预训练数据的质量对模型能力的影响至关重要。已有的研究表明&#xff0c;基于含有噪音、有毒和重复数据的低质量语料库进行预训练&#xff0c;会严重损害模型性能。 数据…

hdfs机器下线维修

HDFS&#xff08;Hadoop Distributed File System&#xff09;是Hadoop分布式文件系统&#xff0c;它设计用来跨多个物理服务器存储大量数据。当HDFS集群中的某个机器需要下线维修时&#xff0c;需要谨慎处理以避免数据丢失或服务中断。以下是处理HDFS机器下线的步骤&#xff1…

[C][C运算][取模/取余运算][隐式类型转换][算术转换]详细讲解

目录 1.取模/取余运算1.取整2.取模 2.隐式类型转换3.算术转换 1.取模/取余运算 1.取整 C语言默认向0取整 – trunc()同作用floor() -> 向-∞取整ceil() -> 向∞取整round() -> 四舍五入 2.取模 定义&#xff1a;如果a和d是两个自然数&#xff0c;d非零&#xff0c…

AI智能体|使用扣子Coze基于IDE创建自定义插件

大家好&#xff0c;我是无界生长。 在使用Coze的过程中&#xff0c;有些个性化场景无法通过插件商店已有的插件满足&#xff0c;这个时候就需要通过自定义插件的方式来实现业务需求。下面将通过一个实际案例来简单介绍下如何使用Coze基于IDE创建自定义插件&#xff0c;完成在Co…

Godot游戏引擎有哪些优势

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;众所周知在当今游戏开发领域&#xff0c;各种游戏引擎如雨后春笋般涌现&#xff0c;为开发者提供了丰富的选择。而在这些众多的选择中&#xff0c;Godot游戏引擎以其独特的特性和开放源代码的优势&…

java.util.ConcurrentModificationException异常分析及解决

问题描述 有一个RecycleView视图组件&#xff0c;数据变更得时候进行了增加和删除操作&#xff0c;频繁触发 增加、删除数据得操作&#xff0c;低概率出现此问题&#xff0c;代码片段无法展示&#xff0c;可以语言描述一下代码片段 recycleview使用了adapter来展示数据adapte…

SpringBoot集成腾讯云敏感词校验API流程

1.pom.xml中引入腾讯云jar配置信息 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>4.0.11</version> </dependency> 2.application.yaml中添加配置 tencent…

2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版

简介&#xff1a; 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 下载地址 https://www.kuaiyuanya.com/product/article/index/id/33.html 图片&#xff1a;

Microsoft.NET 框架程序设计 —— 基元类型、引用类型与值类型

本文讨论.NET 框架开发人员经常遇到的各种数据类型。熟悉这些类型的不同行为对于一个开发人员来说至关重要。当我刚开始接触.NET框架时,就没有完全理解基元类型、引用类型和值类型之间的一些差别。这种模糊的认识甚至无意间导致了一些难以査找的bug以及性能问题。我希望通过本…

【QT】实时语言切换

前言&#xff1a;一个完整的软件开发通常需要支持多种语言&#xff0c;本文主要讲述实时语言切换开发时的相关解决方案。 1. 制作字库文件 添加标识 在需要被翻译的字符串前面标识tr&#xff0c;如QString str&#xff1d;tr(“hello,world!”); &#xff0c;这很重要&#xf…

使用 Django Rest Framework 构建强大的 Web API

文章目录 安装 Django Rest Framework创建序列化器创建视图和 URL 路由配置认证和权限测试 API Django Rest Framework&#xff08;DRF&#xff09;是一个强大的工具&#xff0c;用于在 Django Web 框架中构建灵活且功能丰富的 Web API。它提供了许多功能&#xff0c;包括序列化…

ubuntu22.04 kubeadm安装k8s集群(从零到有)

ubuntu kubeadm安装k8s集群 前言一、初始化所有ubuntu服务器二、安装kubeadm三、kubeadm初始化节点、加入集群四、安装kubesphere1、下载yaml文件2、运行apply报错3、安装完成。4、忘记密码,强制修改5、Kubesphere其他组件安装前言 k8s 三master 三node所有节点hosts文件添加…

android radiongroup应用举例

android radiongroup应用举例 在 Android 中&#xff0c;RadioGroup 是一个特殊的布局容器&#xff0c;用于包含多个 RadioButton 控件。这些 RadioButton 通常一起使用&#xff0c;以便用户可以从一组选项中选择一个。当用户选择其中一个 RadioButton 时&#xff0c;其他 Rad…

(六)DockerCompose安装与配置

DockerCompose简介 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中&#xff0c;经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现…

线性回归分析

线性回归分析是统计学和数据分析中常用的一种工具&#xff0c;它研究的是因变量与自变量之间的线性关系。在实际应用中&#xff0c;线性回归可以帮助我们理解变量之间的关联&#xff0c;预测未来的趋势&#xff0c;以及进行决策支持。在本选题中&#xff0c;我们将深入探讨线性…

protobuf学习

学习了下protobuf这个工具&#xff0c;可以用来序列化数据结构&#xff0c;而且效率很高&#xff0c;数据可以压缩的更小。 记录下&#xff0c;我这里主要在C#里使用&#xff0c;从NuGet程序包安装以下两个 安装好后可以在该程序目录找到 packages\Google.Protobuf.Tools.3.26.…