当前位置: 首页 > news >正文

python使用多进程,传入多个参数?

先展示一下我的多进程代码:

def process_image(image_path_list):# 获取模板以及类别名template_feature = {}template_image = cv2.imread(image_path_list)template_feature[curr_template_name] = template_imageinput_image = cv2.imread(img)template_feature['input_image'] = input_image# 将比较的图片统一至相同的大小img_update_dict = resize(template_feature)# 建立直方图output_hist_dict = create_rgb_hist(img_update_dict)# 根据RGB直方图计算巴士距离、相似性以及卡方分布# bashi_dict, similarity_dict, kafang_dict = hist_compare(output_hist_dict)similarity_dict = hist_compare(output_hist_dict)# return bashi_dict, similarity_dict, kafang_dictreturn similarity_dict
# 创建进程池
image_paths = [os.path.join(template_dir, img) for img in os.listdir(template_dir)]
with Pool(processes=os.cpu_count()) as pool:results = pool.map(process_image, image_paths)
pool.close()
pool.join()

上述代码,是用来将输入图像img与本地文件夹的所有图像一一匹配。
可以看出使用多进程,调用process_image,传入的image_paths这个存放图像路径的列表,但是process_image函数里有一个input_image = cv2.imread(img),img无法通过pool.map()传入。
解决办法,使用functools.partial
使用示例:

from functools import partial
from multiprocessing import Pool, cpu_countdef process_image(image_path, additional_param):# 在这里处理图像,可以使用 additional_paramadditional_param = "your_additional_param_here"# 创建一个部分应用了 additional_param 的 process_image 函数
partial_process_image = partial(process_image, additional_param=additional_param)# 使用 multiprocessing.Pool 进行并行处理
with Pool(processes=cpu_count()) as pool:results = pool.map(partial_process_image, self.image_paths)

更改后的代码为:

def process_image(image_path_list):# 获取模板以及类别名template_feature = {}template_image = cv2.imread(image_path_list)template_feature[curr_template_name] = template_imageinput_image = cv2.imread(img)template_feature['input_image'] = input_image# 将比较的图片统一至相同的大小img_update_dict = resize(template_feature)# 建立直方图output_hist_dict = create_rgb_hist(img_update_dict)# 根据RGB直方图计算巴士距离、相似性以及卡方分布# bashi_dict, similarity_dict, kafang_dict = hist_compare(output_hist_dict)similarity_dict = hist_compare(output_hist_dict)# return bashi_dict, similarity_dict, kafang_dictreturn similarity_dict
# 创建进程池
image_paths = [os.path.join(template_dir, img) for img in os.listdir(template_dir)]
# 创建一个部分应用了 additional_param 的 process_image 函数
partial_process_image = partial(process_image, additional_param=img)
# 创建进程池
with Pool(processes=os.cpu_count()) as pool:results = pool.map(partial_process_image, self.image_paths)
pool.close()
pool.join()

相关文章:

python使用多进程,传入多个参数?

先展示一下我的多进程代码: def process_image(image_path_list):# 获取模板以及类别名template_feature {}template_image cv2.imread(image_path_list)template_feature[curr_template_name] template_imageinput_image cv2.imread(img)template_feature[inp…...

李彦宏: 开源模型是智商税|马斯克: OpenAI 闭源不如叫 CloseAI

在 2024 年世界人工智能大会(WAIC 2024)上,百度创始人、董事长兼首席执行官李彦宏发表对开源模型的评价。 李彦宏认为:开源模型实际上是一种智商税,而闭源模型才是人工智能(AI)行业的未来。 马…...

怎么参与场外期权?场外期权交易要注意什么?

今天带你了解怎么参与场外期权?场外期权交易要注意什么?场外期权(OTC Options)是指在交易所之外进行的期权交易。与场内期权(交易所挂牌交易)不同,场外期权交易由交易双方私下协商确定合约条款&…...

Postman脚本炼金术:高级数据处理的秘籍

🤖 Postman脚本炼金术:高级数据处理的秘籍 Postman不仅是API测试的强大工具,它的脚本功能同样能够在数据处理方面大放异彩。无论是在请求之前设置环境,还是测试后验证结果,Postman的脚本都能提供强大的数据处理能力。…...

MySQL字符串相关数据处理函数

目录 1. 转大小写 2. 截取字符串 sunstr 3. 获取字符长度 4. 字符串拼接 concat 5. 去掉空白 trim 1. 转大小写 转大写:upper() 转小写:lower() 虽然MySQL不严格区分大小写,但是我们还是需要掌握这种大小写的操作以方便学习其他…...

最近查看了一些批处理文件的写法,整理了一些基础的命令符,大佬勿喷

1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。 2. 命令 表示不显示后面的命令,但是会显示结果 3.Goto和: 命令 :定义标签,goto跳转到标签 4.Rem ::注释命令 ::不显示不执行,rem显示不执行 5.Pause 命令 暂停命…...

解决 Yarn 运行时的 Node.js 版本问题:一个详尽的指南

引言 Yarn 是一个流行的 JavaScript 包管理器,它与 Node.js 紧密集成,用于管理项目依赖。然而,在开发过程中,开发者可能会遇到 Node.js 版本不兼容的问题,这会导致 Yarn 运行时出错。本文将提供一个详细的指南&#x…...

SQL基础-DQL 小结

SQL基础-DQL 小结 学习目标:学习内容:SELECTFROMWHEREGROUP BYHAVINGORDER BY运算符ASC 和 DESC 总结 学习目标: 1.理解DQL(Data Query Language)的基本概念和作用。 2.掌握SQL查询的基本语法结构,包括SEL…...

冒泡排序与其C语言通用连续类型排序代码

冒泡排序与其C语言通用连续类型排序代码 冒泡排序冒泡排序为交换排序的一种:动图展示:冒泡排序的特性总结:冒泡排序排整型数据参考代码(VS2022C语言环境): 冒泡排序C语言通用连续类型排序代码对比较的方式更…...

Python爬虫并输出

1. Python爬虫并输出示例 下面是一个使用Python编写的简单网络爬虫示例,该爬虫将抓取某个网页(例如,我们假设为https://example.com,但请注意实际使用时我们需要替换为一个真实且允许抓取的网站)的标题(Ti…...

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…...

MySQL:TABLE_SCHEMA及其应用

MySQL TABLE_SCHEMA及其应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/ar…...

【MySQL】4.MySQL 的数据类型

MySQL 的数据类型 一.数据类型分类在这里插入图片描述二.注意点1.char VS varchar2.datetime VS timestamp3.enum 和 set 的使用方法 一.数据类型分类 二.注意点 1.char VS varchar char 的意义是直接开辟固定大小的空间,浪费磁盘空间,但是效率高varcha…...

STM32中断(NVIC和EXIT)

CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240个外部中断,并且具有 256 级的可编程中断设置。但STM32 并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有 76 个中断,包括16 个内核中断和 60 个可屏蔽中断&am…...

哈弗架构和冯诺伊曼架构

文章目录 1. 计算机体系结构 2. 哈弗架构(Harvard Architecture) 3. 改进的哈弗架构 4. 冯诺伊曼架构(Von Neumann Architecture) 5. 结构对比 1. 计算机体系结构 计算机体系结构是指计算机系统的组织和实现方式&#xff0c…...

Python实现动态迷宫生成:自动生成迷宫的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义迷宫生成类主循环 完整代码 引言 迷宫生成算法在游戏开发和图形学中有着广泛的应用。它不仅可以用于创建迷宫游戏,还可以用于生成有趣的图案。在这篇博客中,我们将使用Python…...

大学生暑假“三下乡”社会实践工作新闻投稿指南请查收!

近年来,大学生暑期“三下乡”社会实践工作方兴未艾,越来越多的大学生通过参与“三下乡”实践工作,走出校园,深入基层,体验农村生活,服务农民,促进农村经济社会发展,实现了理论与实践…...

MySQL InnoDB存储引擎

MySQL InnoDB存储引擎 InnoDB 存储引擎的优点:由于 InnoDB 存储引擎存储的数据量大,性能高,可以有效的保证数据安全等优点,在 MySQL 5.5 后称为了默认的存储引擎。 InnoDB 内存结构: 缓冲池(buffer poll&…...

无头单向非循环链表实现 and leetcode刷题

无头单向非循环链表实现 1. 单链表的模拟实现IList.java接口:MySingleList.java文件: 2. leetcode刷题2.1 获取链表的中间节点2.2 删除链表中所有值为value的元素2.3 单链表的逆置2.4 获取链表倒数第k个节点2.5 给定 x, 把一个链表整理成前半部分小于 x,…...

Ubuntu系统上安装Apache和WordPress

** 第一步跟新系统包 ** 首先跟新系统包 sudo apt update sudo apt upgrade第二步下载安装apache sudo apt install apache2 ##查看apache的状态是否启动成功 sudo systemctl status apache2 ##查看服务器的ip地址 sudo ip a通过ip地址进行访问apache页面 第三步下载安装…...

Windows 11 家庭版安装 WSL + Docker 踩坑记:从 Store 地狱到 --web-download 救赎

一句话总结当你发现 wsl --update 和 wsl --install 永远卡住、报权限错误或连接重置时,不要挣扎,直接用 --web-download 绕过 Microsoft Store。 这 99% 能解决 Windows 11 家庭版上的 WSL 安装/更新问题。一、问题现象:一切看起来都很正常&…...

终极指南:Redoc安全最佳实践,全面保护你的API文档

终极指南:Redoc安全最佳实践,全面保护你的API文档 【免费下载链接】redoc 📘 OpenAPI/Swagger-generated API Reference Documentation 项目地址: https://gitcode.com/gh_mirrors/re/redoc Redoc是一款强大的OpenAPI/Swagger生成API参…...

如何使用Firebase构建Aurelia 1框架实时协作应用:打造高效协同编辑工具

如何使用Firebase构建Aurelia 1框架实时协作应用:打造高效协同编辑工具 【免费下载链接】framework The Aurelia 1 framework entry point, bringing together all the required sub-modules of Aurelia. 项目地址: https://gitcode.com/gh_mirrors/fra/framework…...

终极Kando多语言指南:如何快速实现跨平台饼状菜单的国际化支持

终极Kando多语言指南:如何快速实现跨平台饼状菜单的国际化支持 【免费下载链接】kando 🌸 Do things with utmost efficiency. 项目地址: https://gitcode.com/gh_mirrors/ka/kando Kando是一款高效的跨平台饼状菜单工具,通过直观的径…...

Laravel Stats Tracker设备检测技术解析:精准识别移动端与桌面端

Laravel Stats Tracker设备检测技术解析:精准识别移动端与桌面端 【免费下载链接】tracker Laravel Stats Tracker 项目地址: https://gitcode.com/gh_mirrors/tr/tracker Laravel Stats Tracker是一款强大的Laravel统计跟踪工具,它提供了精准的设…...

5分钟搞定OpenClaw+千问3.5-27B:星图平台镜像一键体验方案

5分钟搞定OpenClaw千问3.5-27B:星图平台镜像一键体验方案 1. 为什么选择云端沙盒方案 上周我尝试在本地笔记本上部署OpenClaw时,被各种环境依赖和权限问题折磨了整整两天。当看到星图平台提供预装OpenClaw和千问3.5-27B的完整镜像时,简直像…...

GESP2025年3月认证C++三级( 第一部分选择题(1-8))

🎯 第1题:Base64魔法箱📜 题目核心: 👉 每 3个字节 → 变成4个字节1、🧠 故事理解有一个魔法机器:👉 每放进去 3个苹果 🍎🍎🍎(不足3个…...

全球不到3%的C++开发者掌握的量子模拟技巧:利用constexpr量子门编译期展开,启动速度提升41倍

第一章:量子计算 C 量子比特模拟示例在经典C环境中模拟量子比特行为,是理解量子门操作与叠加态演化的有效教学手段。本节基于线性代数原理,使用标准C17及以上特性(无需外部量子SDK),通过复数向量与酉矩阵实…...

C++的std--filesystem文件系统库与跨平台路径处理的标准化

C的std::filesystem文件系统库与跨平台路径处理的标准化 在现代软件开发中,跨平台文件系统操作一直是一个复杂且容易出错的挑战。不同操作系统(如Windows、Linux和macOS)使用不同的路径分隔符和文件系统语义,开发者往往需要编写大…...

遥感影像解译实战:从目视解译八要素到精准分类

1. 遥感影像解译的底层逻辑 第一次接触遥感影像时,我盯着屏幕上的彩色方块发懵——这堆像素点怎么能看出是森林还是农田?后来才发现,解译就像玩"大家来找茬",关键要掌握八要素这把万能钥匙。大小、形状、阴影、颜色、纹…...