Python threading模块基础用法与守护线程详解

桃夭
桃夭
发布时间:2026-10-13| 4人浏览过
原创

本文详细解析Python中threading模块的基本使用方法,包括如何正确传递元组参数、启动与等待线程执行。重点介绍守护线程(Daemon Thread)的设置及其对主线程结束的影响,通过代码示例说明setDaemon(True)的正确使用时机及注意事项,帮助开发者避免线程挂起或意外终止的问题。

Python threading模块基础用法与守护线程详解

在多线程编程中,参数传递有着严格的格式要求。如果传入的参数不符合规范,程序将会报错。


import _thread as thread
import time
def loop1(in1):
  print("Start loop 1 at:", time.ctime())
print("我是参数", in1)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def loop2(in1, in2):
  print("Start loop 2 at:", time.ctime())
print("我是参数", in1, "和参数 ", in2)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def main():
  print("Starting at:", time.ctime())
thread.start_new_thread(loop1, ("liuming", ))
# 上面我们传参的时候, 我用的是:(“ liuming”), 这里面是没有逗号的, 结果编译报错, 告诉我, 这里面必须传入元组
# 因此, 我才在里面加了一个逗号, 使其变成一个元组
thread.start_new_thread(loop2, ("zhanglei", "liuhao"))
print("All done at:", time.ctime())
if __name__ == "__main__":
  main()
while True:
  time.sleep(10)
​

threading模块的核心用法

threading模块的核心用法

最直接的方式是通过threading.Thread类来创建线程实例。

其基本语法格式如下:

t = threading.Thread(target=函数体, args=(参数1, 参数2, ...)),其中args参数必须接收一个元组。

调用t.start()方法即可启动多线程。

调用t.join()方法可以阻塞当前线程,直到该子线程执行完毕。


def main():
  print("Start at :", time.ctime())
t1 = threading.Thread(target = loop1, args = ("王老大", ))
t1.start()# 启动多线程
t2 = threading.Thread(target = loop2, args = ("孙子", "好吗"))
t2.start()
t1.join()
t2.join()
print("End at :", time.ctime())
if __name__ == "__main__":
  main()

通过上述代码可以看出,虽然启动了两个子线程,但主程序会等待所有子线程执行完毕后,才会打印最后的“结束”语句。

守护线程的设置与注意事项

2. 守护线程(Daemon Thread)

设置语法为:线程实例.setDaemon(True)。

其主要作用包括:

(1)若将子线程设置为守护线程,当主线程结束时,该子线程会自动退出;

(2)通常认为守护线程并不重要,或者不允许其脱离主线程独立运行;

(3)守护线程的行为表现可能与具体的运行环境有关。

注意事项:setDaemon(True)语句必须写在start()方法之前,否则可能导致子线程被无限期挂起并引发运行报错。


def fun():
  print("Start fun")
time.sleep(2)
print("End fun")
​print('Main thread')
t3 = threading.Thread(target = fun, args = ())
t3.setDaemon(True)
t3.start()
time.sleep(1)
print("Main thread End")

从执行结果可以看出,主线程结束后(即打印完“Main thread End”),子线程的最后一次打印并未输出,程序随即结束。这说明当主线程终止时,无论子线程执行到哪一步,都会被强制终止(kill),这符合我们的预期设定。

三、完整源代码

文件名为:d24_2_usage_of_threading.py

代码托管地址:https://github.com/ruigege66/Python_learning/blob/master/d24_2_usage_of_threading.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

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

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 算法库。