python多进程
python多进程的使用有两种方式:
- multiprocessing
- concurrent的使用方式
multiprocessing的使用方式
- 定义线程池的数量
- 开始处理,结果回调
下面以多进程下载图像为例:
import multiprocessing
import requests
from io import BytesIO
from PIL import Image, ImageFont, ImageDraw# 多进程函数下载图像
def multiprocess_download_images(urls, num_process=10, download_dir="./tmp_check"):''':param urls: 下载:param num_process: 开启的线程数:param download_dir::param try_nums::return:'''os.makedirs(download_dir, exist_ok=True)if not isinstance(urls, list):urls = [urls]download_pools = multiprocessing.Pool(processes=num_process)for url in urls:download_pools.apply_async(download_single_image, (url, download_dir, 1,), callback=call_back)download_pools.close()download_pools.join()if len(os.listdir(download_dir)) == 0:return Falsereturn True# 下载单个图像
def download_single_image(url, download_dir, timeout=0.5, try_num=3):attempt = 0os.makedirs(download_dir, exist_ok=True)while attempt < try_num:try:response = requests.get(url, timeout=timeout)image = Image.open(BytesIO(response.content))save_path = os.path.join(download_dir, os.path.basename(url))image.save(save_path)return Trueexcept Exception as e:attempt = attempt + 1return False# 多进程的后处理函数
def call_back(return_value):print("return_value:", return_value)if __name__ == "__main__":start_time = time.time()url = "https://huichuan-mc.sm.cn/210172767/2302123579a068b4ee35f0bf9a59a4cb48b673.png"urls = ["https://huichuan-mc.sm.cn/210172767/2302123579a068b4ee35f0bf9a59a4cb48b6731.png","https://huichuan-mc.sm.cn/210172767/230711e31648e9e86837981560794eb42b0c6a.png","https://huichuan-mc.sm.cn/210172767/231228ea9df9bb65549874ac9acfd6a13e7c44.png","https://huichuan-mc.sm.cn/210172767/23122876aec3054982c591ca6bc8af5af877ee.png","https://huichuan-mc.sm.cn/210172767/23122833f8f22e43b7d9d5b6c90c617e482a57.png","https://huichuan-mc.sm.cn/210172767/2212205c641bec29a2a0ba0d6fca100b8e86dc.png","https://huichuan-mc.sm.cn/210172767/2212212aadd8efa1e2e20e14bb3f1a757b2cb2.png","https://huichuan-mc.sm.cn/210172767/231227d1234e9381098211acb3b6b412a2b3ab.jpeg","https://huichuan-mc.sm.cn/210172767/231212a9c43a82e881224338cb4167a98cdeb3.png",]download_dir = "./tmp"multiprocess_download_images(urls, download_dir="./tmp")
看有的用法是这样的:
async_result = download_pools.apply_async(download_single_image, (url, download_dir, 1,), callback=call_back)
result = async_result.get()
但上面的这个用法会阻塞进程直到进程完成直到可用,这里不推荐使用。使用上面的demo即可
concurrent的使用方式
- 定义好基本的处理函数即可
import requests
import concurrent.futures
from io import BytesIO
from PIL import Image, ImageFont, ImageDrawdef multiprocess_download_images(urls, num_process=10, download_dir="./tmp_check"):with concurrent.futures.ProcessPoolExecutor(max_workers=num_process) as executor:futures = [executor.submit(download_single_image, url, download_dir, timeout=0.5, try_num=3)for url in urls]# 下面的代码是进行结果的处理for future in concurrent.futures.as_completed(futures):stat = future.result()if not stat:print(f"ERROR info: 子句语音合成有失败,请检查语音合成")if len(os.listdir(download_dir)) == 0:return Falsereturn Truedef download_single_image(url, download_dir, timeout=0.5, try_num=3):attempt = 0os.makedirs(download_dir, exist_ok=True)while attempt < try_num:try:response = requests.get(url, timeout=timeout)image = Image.open(BytesIO(response.content))save_path = os.path.join(download_dir, os.path.basename(url))image.save(save_path)return Trueexcept Exception as e:attempt = attempt + 1return Falseif __name__ == "__main__":start_time = time.time()url = "https://huichuan-mc.sm.cn/210172767/2302123579a068b4ee35f0bf9a59a4cb48b673.png"urls = ["https://huichuan-mc.sm.cn/210172767/2302123579a068b4ee35f0bf9a59a4cb48b6731.png","https://huichuan-mc.sm.cn/210172767/230711e31648e9e86837981560794eb42b0c6a.png","https://huichuan-mc.sm.cn/210172767/231228ea9df9bb65549874ac9acfd6a13e7c44.png","https://huichuan-mc.sm.cn/210172767/23122876aec3054982c591ca6bc8af5af877ee.png","https://huichuan-mc.sm.cn/210172767/23122833f8f22e43b7d9d5b6c90c617e482a57.png","https://huichuan-mc.sm.cn/210172767/2212205c641bec29a2a0ba0d6fca100b8e86dc.png","https://huichuan-mc.sm.cn/210172767/2212212aadd8efa1e2e20e14bb3f1a757b2cb2.png","https://huichuan-mc.sm.cn/210172767/231227d1234e9381098211acb3b6b412a2b3ab.jpeg","https://huichuan-mc.sm.cn/210172767/231212a9c43a82e881224338cb4167a98cdeb3.png",]download_dir = "./tmp"multiprocess_download_images(urls, download_dir="./tmp")
另外concurrent还有多线程的使用方式,下面附上,实际上python的多线程是伪多线程,这里建议使用多进程
def multiprocess_download_images(urls, num_process=10, download_dir="./tmp_check"):with concurrent.futures.ThreadPoolExecutor(max_workers=num_process) as executor:futures = [executor.submit(download_single_image, url, download_dir, timeout=0.5, try_num=3)for url in urls]# 下面的代码是进行结果的处理for future in concurrent.futures.as_completed(futures):stat = future.result()if not stat:print(f"ERROR info: 子句语音合成有失败,请检查语音合成")if len(os.listdir(download_dir)) == 0:return Falsereturn True
相关文章:
python多进程
python多进程的使用有两种方式: multiprocessingconcurrent的使用方式 multiprocessing的使用方式 定义线程池的数量开始处理,结果回调 下面以多进程下载图像为例: import multiprocessing import requests from io import BytesIO from…...
springboot 的yaml配置文件加密
springboot 的yaml配置文件加密 一、采用yaml 插件加密添加依赖创建启动类配置加密密钥加密需要加密的内容用过测试类编写加密的YAML配置解密配置可选:自定义配置扩展:修改ENC() 一、采用yaml 插件加密 使用Jasypt对Spring Boot的YAML配置文件进行加密是…...
npm发布、更新、删除包
如何将自己开发的依赖包发布到npmjs上供别人使用?五个步骤搞定! 实现步骤: 创建自己的工具包项目,进行开发。注册npmjs账号。执行npm login在控制台登录,填写用户信息。执行npm publish发布包。更新及删除。 步骤一…...
【JavaEE进阶】——Mybatis操作数据库(使用注解和XML方式)
目录 🚩三层架构 🎈JDBC操作回顾 🚩什么是MyBatis 🚩MyBatis⼊⻔ 🎈准备工作 📝创建⼯程 📝数据准备 🎈配置数据库连接字符串 🎈写持久层代码 🎈单…...
【数据结构】六种排序实现方法及区分比较
文章目录 前言插入排序希尔排序选择排序堆排序快速排序冒泡排序总结 前言 众所周知,存在许多种排序方法,作为新手,最新接触到的就是冒泡排序,这种排序方法具有较好的教学意义,但是实用意义不高,原因就在于…...
QT之QTableWidget详细介绍
本文来自于学习QT时遇到QTableWidget类时进行总结的知识点,涵盖了QTableWidget主要函数。本人文笔有限,欢迎大家评论区讨论。 一、QTableWidget介绍 QTableWidget 类是 Qt 框架中的一个用于展示和编辑二维表格数据的控件。它是对 QTableView 和 QStand…...
mac电脑安卓设备文件传输助手:MacDroid pro 中文激活版
MacDroid Pro是一款专为Mac电脑和Android设备设计的软件,旨在简化两者之间的文件传输和数据管理,双向文件传输:支持从Mac电脑向Android设备传输文件,也可以将Android设备上的文件轻松传输到Mac电脑上。完整的文件访问和管理&#…...
车流量监控系统
1.项目介绍 本文档是对于“车流量检测平台”的应用技术进行汇总,适用于此系统所有开发,测试以及使用人员,其中包括设计背景,应用场景,系统架构,技术分析,系统调度,环境依赖…...
LAMP集群分布式实验报告
前景: 1.技术成熟度和稳定性: LAMP架构(Linux、Apache、MySQL、PHP)自1998年提出以来,经过长时间的发展和完善,已经成为非常成熟和稳定的Web开发平台。其中,Linux操作系统因其高度的灵活性和稳…...
vue3中函数必须有返回值么?
在 Vue 3 中,特别是涉及到Composition API的使用时,setup() 函数确实必须有返回值。setup() 函数是组件的入口点,它的返回值会被用来决定哪些数据和方法是可被模板访问的。返回的对象中的属性和方法可以直接在模板中使用。如果setup()没有返回…...
经常用到的函数
创建文件夹和删除文件夹的函数 def make_dirs(*dirs):for new_dir in dirs:if not os.path.exists(new_dir):try:os.makedirs(new_dir)except RuntimeError:return Falsereturn Truedef remove_files(file_path_list):""" 删除列表中指定路径文件Args:file_pat…...
vue3学习(六)
前言 接上一篇学习笔记,今天主要是抽空学习了vue的状态管理,这里学习的是vuex,版本4.1。学习还没有学习完,里面有大坑,难怪现在官网出的状态管理用Pinia。 一、vuex状态管理知识点 上面的方式没有写全,还有…...
[数据集][目标检测]猫狗检测数据集VOC+YOLO格式8291张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8291 标注数量(xml文件个数):8291 标注数量(txt文件个数):8291 标注…...
简单模拟实现shell(Linux)
目录 前言 展示效果 实现代码 前言 该代码模拟了shell的实现,也就是解析类似于“ls -a -l"的命令,当我们启动我们自己写的shell的可执行程序时,我们输入"ls"的命令,也可以展示出在shell中输入&…...
SQL深度解析:从基础到高级应用
SQL(Structured Query Language)是用于管理关系型数据库的语言,广泛应用于数据管理、分析和查询。本文将详细介绍SQL的基础知识、高级特性以及一些常见的代码示例,帮助您全面掌握SQL的应用。 一、SQL基础语法 数据库操作 创建数据…...
乡村振兴与脱贫攻坚相结合:巩固拓展脱贫攻坚成果,推动乡村全面振兴,建设更加美好的乡村生活
目录 一、引言 二、巩固拓展脱贫攻坚成果 1、精准施策,确保稳定脱贫 2、强化政策支持,巩固脱贫成果 3、激发内生动力,促进持续发展 三、推动乡村全面振兴 1、加快产业发展,增强乡村经济实力 2、推进乡村治理体系和治理能力…...
[AI Google] Google I/O 2024: 为新一代设计的 I/O
编辑注:以下是 Sundar Pichai 在 I/O 2024 上讲话的编辑版,并包含了更多在舞台上宣布的内容。查看我们收藏中的所有公告。 Google 完全进入了我们的 Gemini 时代。 在开始之前,我想反思一下我们所处的这一刻。我们已经在 AI 上投资了十多年…...
CentOS配置DNS
1.打开/etc/resolv.conf文件 sudo vi /etc/resolv.conf2.添加配置 nameserver 114.114.114.1143.保存并关闭文件。 4.为了确保配置生效,重启网络服务或重启系统。例如: 重启网络: sudo systemctl restart network重启系统: …...
ArcGIS空间数据处理、空间分析与制图;PLUS模型和InVEST模型的原理,参量提取与模型运行及结果分析;土地利用时空变化以及对生态系统服务的影响分析
工业革命以来,社会生产力迅速提高,人类活动频繁,此外人口与日俱增对土地的需求与改造更加强烈,人-地关系日益紧张。此外,土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…...
Linux基于V4L2的视频捕捉
简介 linux环境使用V4l2实现摄像头捕捉,界面流畅播放并可以保存图片到本地。 代码 void VideoCapture::run() {qDebug() << "VideoCapture start";// 打开设备int fd open("/dev/video0", O_RDWR);if(fd < 0){qDebug("video设…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...
MCP和Function Calling
MCP MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
