You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将以下Python嵌套for循环并行化执行?

Python 多进程并行实现方案

你原有逻辑中每个i、每个通道j的处理完全独立,无数据依赖,适合用concurrent.futures.ProcessPoolExecutor绕开GIL实现并行,以下是可直接复用的实现:

版本1:按i维度拆分任务(推荐,调度开销更低)

先拆分每个i对应的3个通道计算为单个任务,减少进程调度成本,同时保留原有的i%100打印逻辑:

import numpy as np
from concurrent.futures import ProcessPoolExecutor

# 单进程处理单个i的所有通道逻辑
def process_single_i(args):
    i, testX, N, kernel_matrix = args
    j_results = []
    for j in range(3):
        img = testX[i,:,:,j]
        filtered_img = sr_cnn(img, N, kernel_matrix)
        j_results.append((j, filtered_img.astype(np.uint8)))
    if i % 100 == 0:
        print(f"已处理i={i}")
    return i, j_results

# 并行主函数
def parallel_forlooptest(testX, N, kernel_matrix, max_workers=None):
    # 初始化输出数组,和原输出维度、类型完全一致
    testX_new = np.zeros_like(testX, dtype=np.uint8)
    # 生成所有待处理的任务参数
    task_list = [(i, testX, N, kernel_matrix) for i in range(10000)]
    # 启动进程池执行
    with ProcessPoolExecutor(max_workers=max_workers) as executor:
        for i, j_results in executor.map(process_single_i, task_list):
            for j, filtered_img in j_results:
                testX_new[i,:,:,j] = filtered_img
    return testX_new

注意事项

  • Windows系统下运行多进程代码时,必须把调用逻辑放在if __name__ == '__main__':代码块中,否则会出现进程重复启动报错。
  • max_workers参数可根据CPU核心数调整,默认等于CPU核心数,若sr_cnn本身已经用到多线程计算,可适当调小该值避免资源竞争。
  • 若testX数组过大,重复序列化传参有性能损耗时,可以改用multiprocessing.Array实现共享内存,降低数据拷贝开销。

内容的提问来源于stack exchange,提问作者Başak Esin Köktürk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:24:05