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

Python多进程示例未提速问题:为何多进程与串行耗时一致?

问题诊断与解决

你遇到的这个问题其实是Python多进程创建时的一个常见小错误——你在给Process的target参数赋值时,直接调用了函数(带括号()),而不是传递函数本身的引用。

错误原因拆解

看你这段代码:

p1 = multiprocessing.Process(target = multi1.main(), args=())

这里的multi1.main()会在创建进程对象的瞬间就被同步执行,而不是让子进程去执行。也就是说,在你调用p1.start()之前,三个main()函数已经按顺序跑完了,后面的start()和join()其实是在操作三个没有实际任务的空进程。

所以你的“多进程测试段”本质上和后面的同步执行段做了完全一样的事情:都是同步运行了三次main(),耗时自然完全相等。

修正后的代码

只需要去掉target里函数名后的括号,把函数本身传给target即可:

import multiprocessing
import multi1
import multi2
import multi3
import time

t0 = time.time()
if __name__ == '__main__':
    # 去掉main后面的(),传递函数引用而非执行结果
    p1 = multiprocessing.Process(target=multi1.main, args=())
    p2 = multiprocessing.Process(target=multi2.main, args=())
    p3 = multiprocessing.Process(target=multi3.main, args=())
    p1.start()
    p2.start()
    p3.start()
    p1.join()
    p2.join()
    p3.join()
t1 = time.time()

multi1.main()
multi2.main()
multi3.main()
t2 = time.time()

# 建议统一使用Python3的print函数写法
print(t1 - t0)
print(t2 - t1)

补充说明

  • 如果你的main()函数需要传参数,把参数放在args元组里即可,比如args=(10, "demo")。
  • 另外注意你的代码里print t1-t0是Python2的写法,现在主流环境都是Python3,建议改成带括号的print(t1-t0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:58:22