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

如何用Python subprocess同时启动GUI与驱动程序,无需等待对方执行完成?

解决GUI与驱动代码同时运行的问题

你当前使用的subprocess.call()是阻塞式调用——它会等待第一个命令(GUI程序)完全执行完毕后,才会启动第二个命令(驱动代码),这就是没法同时运行的原因。下面给你两种可行的解决方案:

方案一:用subprocess.Popen实现非阻塞启动

Popen是subprocess模块的非阻塞方法,启动进程后会立刻返回,不会等待进程结束,正好满足你的需求:

import subprocess

# 启动GUI程序,直接返回,不等待结束
subprocess.Popen(["pypy3", "gui-main-staff.py"])
# 启动驱动代码,同样直接返回
subprocess.Popen(["pypy3", "driver.py"])

如果后续需要管理这两个进程(比如手动终止),可以保存Popen对象:

import subprocess

# 保存进程引用
gui_process = subprocess.Popen(["pypy3", "gui-main-staff.py"])
driver_process = subprocess.Popen(["pypy3", "driver.py"])

# 后续需要终止进程时调用
# gui_process.terminate()
# driver_process.terminate()

方案二:正确使用multiprocessing模块

你之前用multiprocessing没成功,大概率是没遵循模块的使用规范(比如Windows下必须加if __name__ == "__main__":)。正确的用法如下:

import multiprocessing
import subprocess

# 定义启动GUI的函数
def start_gui():
    subprocess.call(["pypy3", "gui-main-staff.py"])

# 定义启动驱动的函数
def start_driver():
    subprocess.call(["pypy3", "driver.py"])

if __name__ == "__main__":
    # 创建进程对象
    gui_proc = multiprocessing.Process(target=start_gui)
    driver_proc = multiprocessing.Process(target=start_driver)
    
    # 启动两个进程
    gui_proc.start()
    driver_proc.start()
    
    # 注意:如果不需要等待进程结束,不要加join()
    # 加join()会阻塞主进程,直到对应子进程跑完
    # gui_proc.join()
    # driver_proc.join()

注意事项

  • Windows系统下使用multiprocessing必须加if __name__ == "__main__":,否则会出现进程重复创建的问题;
  • 如果你的GUI程序自带主循环(比如Tkinter的mainloop()、PyQt的exec()),启动后会自动维持运行,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:55:09