Python 实现多程序同步执行的方法

不晚
不晚
发布时间:2026-10-12| 2人浏览过
原创

在 Python 开发中,经常需要同时启动多个外部程序或脚本。本文详细解析如何利用 subprocess、threading 和 multiprocessing 模块实现多程序的同步与异步执行,涵盖参数传递、结果获取及异常处理等关键操作。

核心方法概览

要实现“同时运行多个程序”,本质上是将任务分发到不同的执行流中。Python 提供了三种主流方案,分别适用于不同场景:

  • subprocess 模块:适用于调用外部可执行文件或脚本,支持同步阻塞和异步非阻塞模式。
  • threading 模块:适用于 I/O 密集型任务,通过多线程实现并发执行。
  • multiprocessing 模块:适用于 CPU 密集型任务,利用多进程绕过 GIL 限制,实现真正的并行计算。

方法一:使用 subprocess 模块

subprocess 是 Python 官方推荐的调用外部程序的接口。它允许父进程启动子进程,并控制其输入输出。

1. 同步执行(阻塞模式)

默认情况下,subprocess 是同步执行的。这意味着代码会等待当前程序执行完毕后,再执行下一行。虽然这看起来是“顺序”执行,但可以通过控制逻辑实现复杂的串行依赖。

import subprocess

# 启动第一个程序,并等待其完成
subprocess.run(['python', 'script1.py'])
print('第一个程序执行完毕')

# 启动第二个程序,并等待其完成
subprocess.run(['python', 'script2.py'])
print('第二个程序执行完毕')

2. 异步执行(非阻塞模式)

若需真正“同时”运行,需使用 Popen 对象,不等待子进程结束即可继续执行后续代码。这种方式适用于需要并行启动多个耗时任务且无需立即获取结果的场景。

import subprocess

# 启动程序1,不等待结束
proc1 = subprocess.Popen(['python', 'script1.py'])
# 启动程序2,不等待结束
proc2 = subprocess.Popen(['python', 'script2.py'])

# 此时两个程序已在后台同时运行
print('两个程序已启动')

# 等待所有程序结束,并获取返回码
proc1.wait()
proc2.wait()
print('所有程序执行完毕')

方法二:使用 threading 模块

如果“程序”指的是 Python 内部的函数或脚本逻辑,使用多线程是更轻量级的选择。通过 threading.Thread 可以创建多个线程并发执行任务。

import threading
import time

def run_task(task_name):
    print(f'开始执行 {task_name}')
    time.sleep(2)  # 模拟耗时操作
    print(f'{task_name} 执行完毕')

# 创建线程
thread1 = threading.Thread(target=run_task, args=('Task A',))
thread2 = threading.Thread(target=run_task, args=('Task B',))

# 启动线程
thread1.start()
thread2.start()

# 等待线程结束
thread1.join()
thread2.join()
print('所有线程执行完毕')

方法三:使用 multiprocessing 模块

对于计算密集型任务,多线程受限于 Python 的全局解释器锁(GIL)。此时应使用 multiprocessing 模块,它通过创建独立的进程来执行任务,真正实现并行。

from multiprocessing import Process
import time

def compute(task_id):
    print(f'进程 {task_id} 开始计算')
    time.sleep(3)
    print(f'进程 {task_id} 计算结束')

if __name__ == '__main__':
    # 创建进程
    p1 = Process(target=compute, args=(1,))
    p2 = Process(target=compute, args=(2,))

    # 启动进程
    p1.start()
    p2.start()

    # 等待进程结束
    p1.join()
    p2.join()
    print('所有进程执行完毕')

选择建议

  • 调用外部命令/脚本:首选 subprocess。若需并行,使用 Popen 配合 wait()。
  • I/O 密集型任务(如网络请求、文件读写):使用 threading,开销小,实现简单。
  • CPU 密集型任务(如数据处理、图像渲染):使用 multiprocessing,避免 GIL 限制。

以上就是 Python 同时运行多个程序的详细内容,更多关于 Python 并发编程的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。