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

为什么Windows下Python多进程代码main块外的print会执行3次?

原因分析
  • 两类平台Python创建子进程的默认机制存在本质区别:
    • Linux默认使用fork方式创建子进程:子进程会直接复制父进程的运行时状态,从fork系统调用的位置继续向下执行,不会重新运行整个脚本的顶层代码,因此只有主进程会执行最后一行的print(123),最终仅输出1次。
    • Windows没有fork系统调用,默认使用spawn方式创建子进程:子进程启动时会重新导入并完整执行整个脚本文件,所有未被if __name__ == '__main__'判断保护的顶层代码,都会在每个子进程中重复执行一次。
  • 输出次数对应逻辑:你在代码中启动了2个工作子进程,加上1个主进程,三个进程都会执行顶层的print(123),因此Windows平台下会看到3次123输出。
修复方案

只要把不需要重复执行的顶层代码,全部放到if __name__ == '__main__'的代码块内部即可,修改后代码示例:

from multiprocessing import Pool

def foo(a, b):
    print(a,b)
    ...

def bar(a, b):
    print(a,b)
    ...

if __name__ == '__main__':
    pool = Pool(processes=2)
    func_list = [foo, bar]
    for func in func_list:
        pool.apply_async(func, (1, 2))
    pool.close()
    pool.join()
    # 移到main块内部,仅主进程执行
    print(123)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:45:05