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

为何通过多进程启动单个Python函数比直接调用更快?

为何通过多进程启动单个Python函数比直接调用更快?

这确实是个有点反直觉的问题——按常理说,多进程本身还有启动开销,单个进程跑应该和直接调用差不多甚至更慢才对。不过你自己最终找到的原因非常关键,咱们来把整个逻辑理清楚:

首先还原你的测试场景:
你定义了一个myworkfunction()函数,分别用两种方式执行:

  1. 多进程调用:通过multiprocessing.Process启动单个进程执行,耗时26秒
from multiprocessing import Process
import time

starttime = time.time()
pointers = []
pointers.append(Process(target=myworkfunction, args=()))
for pointer in pointers:
    pointer.start()
for pointer in pointers:
    pointer.join()
print(time.time() - starttime) # 耗时26秒
  1. 直接调用:在当前上下文直接执行函数,耗时35秒
starttime = time.time()
myworkfunction()
print(time.time() - starttime) # 耗时35秒

一开始你怀疑是不是多进程有特殊的内核优先级、或者缓存预加载之类的机制导致更快,但后来你通过测试找到了真正的原因:你的代码是运行在Flask环境中的!

Flask本身是基于线程模型的,当你直接调用函数时:

  • 函数的计算任务会和Flask自身的线程任务(比如处理请求、维护服务状态等)共享同一个进程的CPU资源,它们会在同一个执行队列里互相抢占资源,导致你的函数执行被拖慢。

而当你用多进程启动函数时:

  • 新进程是完全独立于Flask主进程的,它能获取到独立的CPU资源,相当于和Flask的线程任务并行执行,不会被Flask的后台工作抢占资源,所以反而耗时更短。

你后续也做了验证:脱离Flask环境后,直接调用和多进程调用的耗时几乎一致,这完全坐实了这个结论。

其实这种情况在带有后台服务的场景里很常见,当主进程/线程本身有持续负载时,把耗时任务放到独立进程中,就能避免资源竞争,提升执行效率。

备注:内容来源于stack exchange,提问作者giacomoc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:02:59