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

为何Python多进程中同一段代码会在主进程与子进程均执行?

为什么子进程Process-1会执行输出sl的代码?

这是Windows系统下multiprocessing模块的启动机制导致的,核心原因如下:

  • Windows没有类Unix系统的fork调用,创建子进程时会重新加载整个脚本文件(相当于子进程会把当前脚本当作模块导入执行)。
  • 你代码里的print("sl",multiprocessing.process.current_process().name)处于全局作用域,不在if __name__ == '__main__':代码块内。当子进程启动时,会执行脚本里所有不在__main__判断内的代码,因此这行print会被子进程执行,输出sl Process-1。

完整执行流程拆解

  1. 主进程执行流程:

    • 导入脚本里的所有模块。
    • 进入if __name__ == '__main__':代码块,创建子进程t1并启动。
    • 打印s2 MainProcess。
    • 退出__main__代码块后,执行全局的print("sl"...),输出sl MainProcess。
  2. 子进程执行流程:

    • 子进程启动时重新加载test.py,此时子进程的__name__不是__main__,所以不会执行if __name__ == '__main__':里的代码。
    • 执行全局作用域的所有代码,包括最后那行print("sl"...),输出sl Process-1。
    • 最后执行子进程的目标函数func,输出任务开始和结束的信息。

解决方法

如果不想让子进程执行这行打印代码,只需把它移到if __name__ == '__main__':代码块内即可:

if __name__ == '__main__':
    t1 = Process(target=func, args=('first', 11))
    t1.start()
    print("s2",multiprocessing.process.current_process().name)
    print("sl",multiprocessing.process.current_process().name)  # 移到这里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:15:19