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

Python中如何让主进程等待所有子进程执行完成后再运行

Python multiprocessing主进程等待所有子进程结束方案

你编写的多进程代码本身逻辑是正确的,调用join()方法的作用就是阻塞主进程,直到对应子进程执行结束后才会继续向下执行,完全符合你要等待所有子进程结束再跑后续主进程逻辑的需求。

你看到的日志现象属于正常执行流程:

  • 第一个8:23:34的主进程日志,是start()方法调用之前的代码输出的,也就是你代码里第一个# do stuff部分的逻辑,这时候子进程还未启动,所以先打印主进程日志。
  • 之后四个子进程启动,并行执行打印各自日志,此时主进程会阻塞在join()调用处,等待所有子进程执行完毕。
  • 最后8:25:19的主进程日志,是所有子进程全部退出、所有join()调用返回后,第二个# do stuff部分的输出,中间的时间差就是你的子进程总执行时长。

如果需要验证逻辑正确性,可以在子进程末尾增加退出日志、在所有join()调用后立刻增加主进程日志,就能清晰看到执行顺序:

import multiprocessing as mp
import logging

logging.basicConfig(format='[%(asctime)s: %(levelname)s/%(processName)s] %(message)s', level=logging.INFO)

class TaskRunner:
    def __function1(self):
        logging.info("Process-1 开始执行")
        # 你的业务逻辑
        logging.info("Process-1 执行结束")

    def __function2(self):
        logging.info("Process-2 开始执行")
        # 你的业务逻辑
        logging.info("Process-2 执行结束")
    
    def __function3(self):
        logging.info("Process-3 开始执行")
        # 你的业务逻辑
        logging.info("Process-3 执行结束")
    
    def __function4(self):
        logging.info("Process-4 开始执行")
        # 你的业务逻辑
        logging.info("Process-4 执行结束")

    def run(self):
        logging.info("主进程:前置逻辑执行完成,准备启动子进程")

        p1 = mp.Process(target=self.__function1)
        p2 = mp.Process(target=self.__function2)
        p3 = mp.Process(target=self.__function3)
        p4 = mp.Process(target=self.__function4)

        p1.start()
        p2.start()
        p3.start()
        p4.start()

        p1.join()
        p2.join()
        p3.join()
        p4.join()

        logging.info("主进程:所有子进程已退出,开始执行后续逻辑")

if __name__ == '__main__':
    runner = TaskRunner()
    runner.run()

如果你需要更简洁的写法,避免手动管理多个进程实例,可以使用进程池实现相同效果:

with mp.Pool(processes=4) as pool:
    # 提交所有任务到进程池
    pool.apply_async(self.__function1)
    pool.apply_async(self.__function2)
    pool.apply_async(self.__function3)
    pool.apply_async(self.__function4)
    # 关闭进程池,等待所有任务执行完成
    pool.close()
    pool.join()
# 此处开始执行主进程后续逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:03