You need to enable JavaScript to run this app. Python multiprocessing多核心批量处理文件时目标函数未调用问题
优惠活动
大模型
产品
解决方案
定价
更多

Python multiprocessing多核心批量处理文件时目标函数未调用问题

问题原因与修复方案
  • 核心错误是Process的传参格式不符合要求,另外还存在依赖导入缺失、变量未初始化的问题,具体修复如下:

1. 修正进程传参格式

multiprocessing.Process的args参数要求传入元组类型,你写的args=(f)不会被识别为单元素元组:Python会将括号视为普通表达式括号,最终传入的是字符串类型的文件路径,进程启动后因参数类型不匹配直接异常退出,这就是日志中出现exitcode=1的原因。
修复方式:在参数后加逗号,声明为单元素元组:

p = Process(target=execute_all, args=(f,))

2. 补全缺失的导入与变量初始化

你的代码中没有导入glob模块,也没有提前初始化files列表就调用append方法,会直接抛出运行时异常,需要在代码开头补全:

import glob
from multiprocessing import Process

files = []

3. 可选:解决子进程输出缓冲问题

Windows系统下多进程的print输出默认会进入缓冲区,可能出现执行了但看不到打印的情况,可以在打印语句中添加flush=True强制刷新缓冲区:

def execute_all(f):
    print("Working on file: ", f, flush=True)
    # 其余业务代码

修复后完整可运行代码

import glob
from multiprocessing import Process

def execute_all(f):
    print("Working on file: ", f, flush=True)
    # 更多业务代码


if __name__ == '__main__':
    files = []
    for file in glob.iglob('C:/workspace/**/*.c', recursive=True):
        files.append(file)

    ListOfProcesses = []
    Processors = 5 
    Parts = [files[i:i + Processors] for i in range(0, len(files), Processors)]
    print("Parts" , Parts)

    for part in Parts:
        for f in part:
            print("File ", f)
            p = Process(target=execute_all, args=(f,))
            print("Process called")
            p.start()
            print("Process started")
            ListOfProcesses.append(p)
        for p in ListOfProcesses:
            print(p)
            p.join()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:45:01