python进程等待如何等待

python进程等待如何等待

作者:Joshua Lee发布时间:2026-01-07阅读时长:0 分钟阅读次数:22

用户关注问题

Q
如何让Python中的子进程等待完成?

我在用Python启动了一个子进程,想知道怎样让主进程等待子进程执行完后再继续执行。

A

使用子进程的join()方法实现等待

在Python中,可以通过multiprocessing模块中的Process对象的join()方法让主进程阻塞等待子进程结束。调用join()会使主进程暂停,直到对应的子进程执行完毕。示例代码如下:

from multiprocessing import Process
import time

def worker():
    time.sleep(3)
    print('子进程结束')

p = Process(target=worker)
p.start()
p.join()  # 等待子进程完成
print('主进程继续执行')
Q
Python如何实现多个进程的同步等待?

如果我启动了多个子进程,想让主进程在所有子进程执行完后一起继续,应该怎么做?

A

调用每个子进程的join()确保全部完成

可以对每个子进程都调用join()方法,主进程会依次等待所有子进程完成。示例代码:

from multiprocessing import Process
import time

def worker(num):
    time.sleep(num)
    print(f'子进程{num}结束')

processes = []
for i in range(3):
    p = Process(target=worker, args=(i+1,))
    p.start()
    processes.append(p)

for p in processes:
    p.join()  # 等待所有进程完成

print('所有子进程结束,主进程继续')
Q
使用Python的subprocess模块等待外部进程完成的方法有哪些?

我调用了外部程序想用Python等待它的执行完成,请问subprocess模块如何做到这点?

A

调用subprocess.run或者使用Popen对象的wait()

subprocess模块提供多种方式执行并等待外部进程结束。

  • 使用subprocess.run():该方法在调用时会阻塞,直到程序执行结束,返回一个CompletedProcess对象。
import subprocess
result = subprocess.run(['ls', '-l'])
print('程序执行完毕')
  • 使用subprocess.Popen启动并通过wait()等待:
import subprocess
p = subprocess.Popen(['ls', '-l'])
p.wait()  # 阻塞直到进程结束
print('外部程序执行完毕')