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

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

def process_image(image_path_list):
    # 获取模板以及类别名
    template_feature = {}
    template_image = cv2.imread(image_path_list)
    template_feature[curr_template_name] = template_image

    input_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_dict
    return 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_count

def process_image(image_path, additional_param):
    # 在这里处理图像,可以使用 additional_param

additional_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_image

    input_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_dict
    return 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew_Xzw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值