Python 多进程中守护进程的创建与行为解析

Nora
Nora
发布时间:2026-10-14| 5人浏览过
原创

本文通过具体代码示例,详解 Python 中如何设置守护进程。重点分析当子进程被标记为守护进程(daemon=True)时,若主进程提前结束,未完成的子进程将被强制终止的行为机制。通过对比不同守护进程设置下的输出结果,帮助开发者理解进程同步与生命周期管理的关键差异。

守护进程概述

在前一篇文章中,我们探讨了 join() 方法在多进程编程中的作用。本文将进一步深入,讲解如何设置守护进程及其对程序运行的具体影响。(注:熟悉 Python 高级并发编程的专家可跳过此部分)

守护进程行为示例

为了直观展示守护进程的行为,我们准备两个具体的代码案例进行说明。


# encoding: utf-8
"""
author: yangyi@youzan.com
time: 2019/7/30 11:20 AM
func:
"""
from multiprocessing import Process
import os
import time

def now():
  return str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

def func_1(name):
  print(now() + ' Run child process %s ,pid is %s...' % (name, os.getpid()))
  time.sleep(2)
  print(now() + ' Stop child process %s ,pid is %s...' % (name, os.getpid()))


def func_2(name):
  print(now() + ' Run child process %s , pid is %s...' % (name, os.getpid()))
  time.sleep(4)
  print(now() + ' hello world!')
  print(now() + ' Stop child process %s , pid is %s...' % (name, os.getpid()))


if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.daemon = True #设置子进程p1为守护线程
  p1.start()
  p2.start()
  print now() + ' Process end .'

首先观察第一个案例的运行结果。

从输出日志可以看到,子进程 func_1 成功启动并打印了开始运行的信息,但并未出现结束运行的提示。这是因为随着主进程的结束,作为守护进程的 func_1 也随之被强制终止,导致其清理代码未被执行。


if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p2.daemon = True #设置子进程p2为守护线程
  p1.start()
  p2.start()
  print now() + ' Process end .'

接着查看第二个案例的运行结果。

在此案例中,func_1 正常启动并运行,而 func_2 因被设置为守护进程,在主进程结束前尚未启动或正在执行时,便随着主进程的退出而被强制终止。

守护进程机制总结

基于上述现象,我们进行总结。

对进程或子线程调用 join() 方法,意味着当前程序必须等待该子进程或子线程执行完毕才能继续。当主进程(或主线程)创建多个子线程并各自独立执行时,若主进程试图退出,默认会检查子线程是否结束。然而,如果我们将子进程的 daemon 属性设置为 True,无论子进程是否执行完毕,它都将在主进程结束时被强制终止,与主进程一同退出。

- 文章结束 -

以上是关于 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 算法库。