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

如何控制前一行代码执行完成后再运行下一行代码?

解决方案

首先明确:正常情况下os.system()是阻塞调用,会等待命令执行完成后才继续执行下一行代码。你遇到的问题,大概率是ok.py本身启动了后台进程后直接退出,导致os.system误判任务已完成,实际核心逻辑还在后台运行。

以下是几种更可靠的解决方式:

方式一:确保ok.py本身阻塞执行到任务结束

检查ok.py的代码,如果里面存在类似os.system("xxx &")、启动daemon进程或使用非阻塞多进程的逻辑,将其修改为阻塞式执行,让ok.py主进程直到所有任务完成后再退出。这种方式是最根本的解决方案。

方式二:用subprocess模块替代os.system(更可控)

subprocess比os.system提供了更精细的进程控制能力,默认也是阻塞等待子进程结束:

import flask
import subprocess
import multiprocessing as mp
import torch

def start_predictor():
    # 阻塞等待ok.py执行完毕,check=True会在命令返回非0时抛出异常
    subprocess.run(["python", "ok.py"], check=True)
    # 只有ok.py执行完成后才会执行这一行
    subprocess.run(["python", "finish.py"], check=True)

if __name__ == "__main__":
    torch.multiprocessing.set_start_method("spawn", True)
    predictor_server = mp.Process(target=start_predictor)
    predictor_server.daemon = True  # 注意原代码拼写错误:deamon → daemon
    predictor_server.start()

方式三:追踪ok.py的整个进程树(无法修改ok.py时用)

如果无法修改ok.py,可以借助psutil库追踪ok.py启动的所有子进程,确保所有相关进程都结束后再执行finish.py:

  1. 先安装psutil:pip install psutil
  2. 修改代码如下:
import flask
import subprocess
import multiprocessing as mp
import torch
import psutil

def wait_for_all_children(pid):
    try:
        parent_proc = psutil.Process(pid)
        # 获取所有递归子进程
        all_children = parent_proc.children(recursive=True)
        # 等待父进程结束
        parent_proc.wait()
        # 等待每个子进程结束
        for child in all_children:
            child.wait()
    except psutil.NoSuchProcess:
        pass

def start_predictor():
    # 启动ok.py并获取进程对象
    ok_proc = subprocess.Popen(["python", "ok.py"])
    # 等待ok.py及其所有子进程完全结束
    wait_for_all_children(ok_proc.pid)
    # 执行finish.py
    subprocess.run(["python", "finish.py"], check=True)

if __name__ == "__main__":
    torch.multiprocessing.set_start_method("spawn", True)
    predictor_server = mp.Process(target=start_predictor)
    predictor_server.daemon = True
    predictor_server.start()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:01:36