当前位置: 首页 > 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()
http://www.lryc.cn/news/397925.html

相关文章:

  • 李彦宏: 开源模型是智商税|马斯克: OpenAI 闭源不如叫 CloseAI
  • 怎么参与场外期权?场外期权交易要注意什么?
  • Postman脚本炼金术:高级数据处理的秘籍
  • MySQL字符串相关数据处理函数
  • 最近查看了一些批处理文件的写法,整理了一些基础的命令符,大佬勿喷
  • 解决 Yarn 运行时的 Node.js 版本问题:一个详尽的指南
  • SQL基础-DQL 小结
  • 冒泡排序与其C语言通用连续类型排序代码
  • Python爬虫并输出
  • 交叉熵损失函数的使用目的(很肤浅的理解)
  • MySQL:TABLE_SCHEMA及其应用
  • 【MySQL】4.MySQL 的数据类型
  • STM32中断(NVIC和EXIT)
  • 哈弗架构和冯诺伊曼架构
  • Python实现动态迷宫生成:自动生成迷宫的动画
  • 大学生暑假“三下乡”社会实践工作新闻投稿指南请查收!
  • MySQL InnoDB存储引擎
  • 无头单向非循环链表实现 and leetcode刷题
  • Ubuntu系统上安装Apache和WordPress
  • Doze和AppStandby白名单配置方法和说明
  • 坑2.Date类型的请求参数
  • javaweb ajax maven mybatis spring springmvc 在项目中有什么用, 举例说明
  • Python编程学习笔记(4)--- 字典
  • 会员运营体系设计及SOP梳理
  • SQL 自定义函数
  • C# 下sendmessage和postmessage的区别详解与示例
  • Transformer重要论文与书籍 - Transformer教程
  • android13 rom 开发总纲说明
  • 2.线性回归
  • 一文了解java中Optional