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

Python multiprocessing模块无法同时启动两个函数是什么原因

问题根源

你的代码无法实现两个函数并行执行的核心错误是join()方法的调用时机不对。
join()方法的作用是阻塞当前主进程,直到被调用的子进程完全执行结束,才会继续执行主进程后续的代码。你当前代码的执行流程是完全串行的:

  • 主进程创建p1进程,调用p1.start()启动p1后,立刻执行p1.join()
  • 主进程在p1.join()处阻塞,等待p1执行完print1逻辑、10秒休眠结束、进程退出后,才会继续往下运行
  • p1结束后,主进程才会创建p2、启动p2,再调用p2.join()等待p2执行完毕

整个流程两个子进程没有任何重叠的运行时间,总耗时约20秒,自然达不到并行效果。

修正方案

把所有进程的start()调用和join()调用分开,先把所有子进程全部启动,再逐个调用join()等待进程结束即可。修正后的代码如下:

from multiprocessing import Process
import time as t
def print1():
    print(1)
    t.sleep(10)

def print2():
    print(2) # 调整输出值方便区分两个进程的执行,不影响并行逻辑
    t.sleep(10)
if __name__ == '__main__':
    p1 = Process(target = print1)
    p2 = Process(target = print2)
    # 先启动全部子进程
    p1.start()
    p2.start()
    # 所有进程启动完成后再统一等待结束
    p1.join()
    p2.join()

修正后两个子进程会几乎同时启动,运行时间重叠,总耗时约10秒,符合并行执行的预期。

补充说明:start()才是启动子进程的唯一必要操作,join()只是用来做进程同步、等待子进程退出的方法,不需要在启动单个进程后立刻调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:36:22