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

在函数内部启动多进程报错:OSError [WinError 87] 参数不正确

解决Windows下multiprocessing的WinError 87参数错误问题

兄弟,这个问题我之前在Windows上用Python多进程的时候也踩过一模一样的坑!咱们先搞清楚为啥会报错,再给你改好代码。

错误原因

Windows系统的multiprocessing模块和Linux不一样——它没有fork机制,创建子进程的时候会重新导入整个主脚本。你原来的代码有两个关键问题:

  1. 把func()定义在了multi()函数内部,子进程重新加载脚本时根本访问不到这个函数(因为子进程不会执行multi());
  2. 把if __name__ == '__main__':放在了multi()函数里面,这完全没用——主进程调用multi()时进入这个块创建子进程,但子进程加载脚本时__name__不是__main__,导致整个逻辑混乱,最终触发参数错误。

修正后的代码

直接把目标函数移到全局作用域,并且把程序的主入口放在全局的if __name__块里,就搞定了:

from multiprocessing import Process

# 把func放在全局作用域,子进程能正常导入访问
def func():
    print("hey")

def multi():
    processes = []
    processes.append(Process(target=func))
    processes.append(Process(target=func))
    for process in processes:
        process.start()

# 主程序入口必须放在全局的这个判断里,避免子进程重复执行代码
if __name__ == '__main__':
    multi()

额外说明

如果非要在函数内部定义子进程的目标函数,也可以用multiprocessing.Manager配合或者把函数封装成可导入的模块,但最省心的方式还是把目标函数放在全局作用域——毕竟Windows的多进程就是靠导入脚本工作的,子进程必须能找到你指定的target函数才行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:07