Python threading.Thread类核心用法与参数详解

半杯拿铁
半杯拿铁
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析Python中threading.Thread类的核心用法。涵盖通过回调对象或重写run()方法两种线程指定方式,深入讲解start()、join()、isAlive()等关键方法的执行逻辑与阻塞机制。同时完整列举构造函数参数(group、target、name、args、kwargs)及守护线程、线程命名等高级特性,帮助开发者掌握Python多线程编程的最佳实践。

Python中的Thread类用于表示在独立控制线程中执行的活动。定义线程活动主要有两种途径:

1、在构造函数中传入回调函数对象

mthread=threading.Thread(target=xxxx,args=(xxxx))
mthread.start()

2、继承Thread类并重写run()方法

以下是一个简单的示例:

import threading, time
class MyThread(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
  def run(self):
    global n, lock
    time.sleep(1)
    if lock.acquire():
      print n , self.name
      n += 1
      lock.release()
if "__main__" == __name__:
  n = 1
  ThreadList = []
  lock = threading.Lock()
  for i in range(1, 200):
    t = MyThread()
    ThreadList.append(t)
  for t in ThreadList:
    t.start()
  for t in ThreadList:
    t.join()

在派生类中,我们重写了父类threading.Thread的run()方法。除构造函数外,其他方法不应在子类中被重写,即子类中仅需重写__init__()和run()方法。使用时,先实例化子线程类对象,随后调用该对象的start()方法即可启动线程(start内部会调用run)

接下来介绍threading.Thread类的常用函数与方法:

1、线程对象创建后,必须通过调用start()方法来启动其活动。该方法会安排在一个独立的控制线程中执行run()方法。

2、线程被激活后,其状态为'alive'(活动)。当run()方法正常结束或抛出未处理的异常时,活动状态终止。isAlive()方法用于检测线程是否处于活动状态。大致而言,从start()调用开始到run()方法返回期间,线程均被视为活动状态。模块函数enumerate()可返回当前活动线程的列表。

3、一个线程可以调用其他线程的join()方法。这将导致调用线程阻塞,直到拥有join()方法的线程终止执行。

4、线程拥有名称,默认格式为'Thread-N',其中N为较小的十进制数。可通过构造函数传递名字,或使用setName()方法设置,通过getName()方法获取。

5、线程可被标记为'daemon thread'(守护线程)。其特性是:当进程中仅剩守护线程时,Python程序将自动退出。该标志的初始值继承自创建线程。可通过setDaemon()方法设置,通过isDaemon()方法获取。

6、存在'main thread'(主线程),它对应于Python程序的初始控制线程。主线程不是后台线程。

7、

class Thread(group=None, target=None, name=None, args=(), kwargs={})

构造函数支持通过关键字参数进行调用。

具体参数如下:

group:应为None,为未来扩展Python Thread类预留。

target:是被run()方法调用的回调对象。默认为None,表示不调用任何对象。

name:线程名称。默认情况下,会创建唯一的名字'Thread-N',其中N为较小的十进制数。

args:目标调用的参数元组,默认为空元组()。

kwargs:目标调用的参数字典,默认为{}。

8、如果子线程重写了构造函数,必须确保在调用基类构造函数(Thread.__init__())后再进行其他操作(即派生类初始化时需先调用基类构造函数)。

9、start()

启动线程活动。每个线程对象最多调用一次。它安排对象的run()在单独的控制线程中执行。

10、run()

表示线程活动的方法。你可以在Thread类的子类中重写此方法。标准的run()方法会调用作为target传递给构造函数的回调对象。

11、join([timeout])

等待线程终止。阻塞调用线程,直到调用join()方法的线程终止(正常退出或抛出未处理的异常),或者发生可选的超时。

若timeout参数不为None,它应为浮点数,指定以秒为单位的超时值。由于join()始终返回None,你必须调用isAlive()来判断是否发生超时。

当未指定timeout参数或为None时,操作将阻塞直至线程终止。

线程可以被join()多次调用。

线程不能调用自身的join(),否则会导致死锁。

在线程启动前尝试调用join()会引发错误。

12、

getName()

返回线程名称。

setName(name)

设置线程名称。

该名称仅用于标识目的,无其他作用。多个线程可拥有相同名称。初始名称通过构造函数设置。

isAlive()

返回线程是否处于活动状态。

isDaemon()

返回线程的守护线程标志。

setDaemon(daemonic)

将守护线程标志设置为布尔值daemonic。此方法必须在start()调用之前被调用。

当不存在活动的非守护线程时,整个Python程序退出。

以上关于Python threading.Thread类使用方法的详解即为全部内容,希望能提供参考,欢迎支持。

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

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