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

Python使用并行For循环计算指定窗口大小的滑动中位数问题排查

滑动窗口中位数并行实现修复方案

核心错误原因

  • 多进程入口缺失:Windows 环境下使用 multiprocessing 模块必须将进程启动逻辑包裹在 if __name__ == '__main__' 代码块中,否则会无限递归创建子进程,导致程序卡死无输出。
  • 并行逻辑设计错误:你当前的代码重复调用完整的滑动窗口计算函数 len(data_arr) 次,完全没有实现单窗口计算的拆分并行,且使用的 pool.apply 是同步阻塞接口,无法发挥多进程并行能力。

修正后可运行代码

import numpy as np
import multiprocessing as mp

# 单个窗口的中位数计算逻辑,作为并行任务的最小单元
def calc_single_window(args):
    data_arr, idx, window_size = args
    return round(np.median(data_arr[idx:idx+window_size]), 1)

if __name__ == '__main__':
    data_arr = np.array([6,7,2,3,4,5,8,8,3,8,6,4,2,5])
    window_size = 3
    # 计算总窗口数
    total_window = len(data_arr) - window_size + 1
    # 构造所有并行任务的入参
    task_params = [(data_arr, i, window_size) for i in range(total_window)]
    # 启动多进程并行执行
    with mp.Pool(mp.cpu_count()) as pool:
        smoothed_result = pool.map(calc_single_window, task_params)
    # 输出结果
    print(smoothed_result)

运行输出

执行后会得到你预期的结果:
[6.0, 3.0, 3.0, 4.0, 5.0, 8.0, 8.0, 8.0, 6.0, 6.0, 4.0, 4.0]

注意:如果你的输入数据量很小,多进程的进程间通信开销会高于单线程串行循环的性能,只有当数据量很大时并行才有实际收益。

内容的提问来源于stack exchange,提问作者Dilohn Lasdnaym

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:07