📜  停止子进程 python (1)

📅  最后修改于: 2023-12-03 15:07:02.472000             🧑  作者: Mango

停止子进程 Python

在编写Python程序时,我们通常会使用多进程或多线程来执行耗时操作,从而提高程序的执行效率。但是,如果子进程没有正确停止,就可能会导致资源的浪费和系统的不稳定。因此,在编写Python程序时,我们必须正确地停止子进程。

停止子进程的方法
1. 使用subprocess.Popen()启动子进程

如果我们是使用subprocess.Popen()函数启动的子进程,那么可以使用process.terminate()方法来停止子进程。terminate()方法会向子进程发送SIGTERM信号,让子进程退出。

import subprocess

# 启动子进程
process = subprocess.Popen(['python', 'child.py'])

# 停止子进程
process.terminate()
2. 使用multiprocessing.Process()启动子进程

如果我们是使用multiprocessing.Process()类启动的子进程,那么可以使用process.terminate()方法来停止子进程。terminate()方法会向子进程发送TERMINATE信号,让子进程退出。

import multiprocessing

# 定义子进程的执行逻辑
def child_process():
  print('子进程开始执行')
  while True:
    pass

# 启动子进程
process = multiprocessing.Process(target=child_process)
process.start()

# 停止子进程
process.terminate()
3. 使用threading.Thread()启动子线程

如果我们是使用threading.Thread()类启动的子线程,那么可以使用threading.Thread.is_alive()方法来判断子线程是否在运行,然后使用threading.Thread._stop()方法来停止子线程。

import threading
import time

# 定义子线程的执行逻辑
def ping():
  print('子线程开始执行')
  while True:
    print('ping')
    time.sleep(1)

# 启动子线程
thread = threading.Thread(target=ping)
thread.start()

# 暂停5秒
time.sleep(5)

# 停止子线程
if thread.is_alive():
  thread._stop()
总结

以上就是Python中停止子进程的方法。我们可以根据实际情况选择合适的方法来停止子进程,从而保证程序的稳定性和性能。