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

Python Jupyter Notebook单函数多进程调用失败问题求助

解决multiprocessing调用函数未执行的问题

你的代码出现函数未执行的假象,核心原因有几个:

1. 未传递必要参数

test函数定义需要接收ta52参数,但创建Process时没有通过args传递该参数,子进程执行时会触发参数缺失错误,但子进程的异常不会直接在主进程输出,导致看起来函数没运行。

2. 全局变量无法跨进程共享

g5、g6是主进程的全局变量,子进程启动时会复制一份独立的副本,子进程内对它们的修改不会同步到主进程,就算函数正常执行,主进程也看不到结果。

3. 未定义的依赖变量

代码中s1、s2、s3、s4、s5未定义,子进程执行时会触发NameError,同样不会在主进程显示,进一步导致函数执行中断。

修改后的代码示例

下面是修复这些问题的版本,使用multiprocessing.Pool来更高效地利用CPU,同时通过返回值获取计算结果:

import multiprocessing as mp
import numpy as np
import timeit

# 先定义s1-s5示例数据(根据实际需求替换)
s1 = ["abc", "def"]
s2 = ["ghi", "jkl"]
s3 = ["mno", "pqr"]
s4 = ["stu", "vwx"]
s5 = ["yz1", "234"]

def process_item(item):
    # 把单条数据的计算逻辑抽出来,方便多进程分发
    s11 = [sum(c1 != c2 for c1, c2 in zip(item, j)) for j in s1]
    s12 = [sum(c1 != c2 for c1, c2 in zip(item, j)) for j in s2]
    s13 = [sum(c1 != c2 for c1, c2 in zip(item, j)) for j in s3]
    s14 = [sum(c1 != c2 for c1, c2 in zip(item, j)) for j in s4]
    s15 = [sum(c1 != c2 for c1, c2 in zip(item, j)) for j in s5]
    
    min1 = min(s11)
    min2 = min(s12)
    min3 = min(s13)
    min4 = min(s14)
    min5 = min(s15)
    
    return min1 + min2 + min3 + min4 + min5, [min1, min2, min3, min4, min5]

if __name__ == '__main__':
    # 示例ta52数据(替换为你的实际数据)
    ta52 = ["abcde", "fghij", "klmno"]
    start = timeit.default_timer()
    
    # 使用Pool,默认利用全部CPU核
    with mp.Pool() as pool:
        results = pool.map(process_item, ta52)
    
    # 整理结果到g5和g6
    g5 = np.array([res[0] for res in results])
    g6 = np.array([res[1] for res in results]).T
    
    stop = timeit.default_timer()
    print('Time: ', stop - start)
    print('g5:', g5)
    print('g6:', g6)

关键修改说明

  • 把单条数据的计算逻辑抽成process_item函数,避免全局变量依赖,方便多进程分发任务
  • 使用mp.Pool()自动管理进程池,充分利用所有CPU算力
  • 通过返回值传递计算结果,避免跨进程全局变量共享的问题
  • 提前定义s1-s5等依赖变量,确保子进程能正常访问

内容的提问来源于stack exchange,提问作者morteza alizade babtangali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:18:22