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

Python多进程代码运行出现意外错误,请求排查与解决

问题分析与修复

你的问题核心是缺少if __name__ == "__main__":的入口保护,这在Windows系统的Python多进程场景下是必须的(Linux/macOS下虽不会立刻报错,但这也是规范写法)。

为什么会报错?

在Windows中,multiprocessing创建子进程时会重新导入你的整个脚本文件。如果没有这个保护判断,子进程导入脚本时会直接执行main()函数,进而再次创建新的子进程,形成无限递归,最终导致进程启动失败,计数任务根本无法正常执行。

if __name__ == "__main__":的作用

这个判断用来区分两种运行场景:

  • 当你直接运行脚本时,__name__变量的值是"__main__",此时会执行main(),启动多进程任务;
  • 当脚本被子进程作为模块导入时,__name__的值是脚本文件名(而非"__main__"),此时只会定义函数和类,不会执行main(),子进程就能专注执行你指定的counter函数。

修复后的代码

from multiprocessing import Process, cpu_count
import time


def counter(num):
    count = 0
    while count < num:
        count += 1


def main():
    print("cpu count:", cpu_count())

    a = Process(target=counter, args=(500000000,))
    b = Process(target=counter, args=(500000000,))

    a.start()
    b.start()

    print("processing...")

    a.join()
    b.join()

    print("Done!")
    print("finished in:", time.perf_counter(), "seconds")


if __name__ == "__main__":
    main()

修复后效果

主进程会正常创建两个子进程,每个子进程独立计数到5亿,两者累计就是10亿,符合你的预期,同时不会再出现启动报错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:48:20