Thread类及其对象——Python 多线程


threading模块中,最流行和最常用的调用是Thread类,它主要用于创建和运行线程。Thread类提供了创建和管理线程所需的所有主要功能。

线程对象是 Thread 类的对象,其中每个对象代表一个要在单独的控制线程中执行的活动。

有两种方法可以创建线程对象并指定要执行的活动:

  • 通过将可调用对象传递给构造器
  • 或者,在子类中覆盖run()方法。

使用构造器或运行方法创建的线程对象可以使用start()方法启动。每当线程对象开始一个新的线程,那么在内部它的run()方法被调用。

这里有一个简单的例子:

在上面的例子中,我们还使用了time模块来使其中一个线程休眠。

Thread类构造器的基本语法是:

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

我们将在下一节解释Thread类构造器的参数。


线程是如何工作的?

一旦我们使用Thread类构造器初始化了一个线程,我们必须调用它的start()方法来启动这个线程。

当线程开始时,线程被认为是活动的和活动的。当其run()方法终止时,正常情况下,或者由于未处理的异常,线程停止活动或活动。isAlive()方法测试线程在任何给定时间点是否活动。

其他线程可以调用一个线程的join()方法来连接任何线程。这将阻塞调用线程,直到调用join()方法的线程终止。

例如,在上面的代码中,从主线程,我们调用t1.join()t2.join(),因此主线程将等待线程t1t2终止然后结束。

每个线程都有一个关联的名称。名称可以传递给构造器,也可以分别使用setname()getname()方法设置或检索名称。

一个标志守护线程可以与任何线程相关联。这个标志的意义在于,当只剩下守护线程时,整个 python 程序就会退出。可以分别使用setDaemon()方法和getDaemon()方法设置或检索标志。

主线程对象对应 python 程序中控件的初始线程。它不是守护线程。

Thread类中的函数和构造器

现在我们已经看到了一个运行线程的基本线程程序,是时候理解代码以及探索Thread类提供的所有重要方法了。

Thread类构造器

以下是Thread类构造器的基本语法:

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

构造器允许许多参数,有些是必需的,有些不是。让我们看看它们是什么:

  • group:应该是无。它是为将来的扩展保留的。

  • target:这是run()方法要调用的可调用对象或任务。如您在顶部的代码示例中所见,我们已经指定函数名 thread1 和 thread2 作为该参数的值。默认值为无。

  • name:用于指定线程名称。默认情况下,会按照格式 Thread-N 生成一个唯一的名称,其中 N 是一个小的十进制数。

  • args:这是目标调用的参数元组。我们可以在其中提供可用于 traget 方法的值。默认值为空,即()

  • kwargs:这是目标调用的关键字参数字典。这默认为{}。

start()方法

此方法用于启动线程的活动。当我们调用这个方法时,内部调用run()方法,该方法执行目标函数或可调用对象。


run()方法

表示线程活动的方法。

您可以在扩展threading模块的Thread类的子类中覆盖这个方法。标准 run()方法调用传递给对象构造器的可调用对象作为目标参数,顺序参数和关键字参数分别取自argskwargs参数。

这里有一个简单的例子,我们已经创建了一个子类,在这个子类中我们将覆盖run()方法。


join([timeout])方法

当我们为任何线程调用此方法时,它会阻塞调用线程,直到其join()方法被调用的线程正常或通过未处理的异常终止。

如果要提供timeout参数,应该是浮点数。


getName()方法

此方法用于返回线程的名称。


setName(name)方法

用于设置线程的名称。该名称是一个仅用于识别目的的字符串。


isAlive()方法

此方法返回线程是否活动。从start()方法返回的那一刻起,直到其run()方法终止,线程都是活动的。


isDaemon()方法

此方法用于获取线程守护程序标志的值。


setDaemon(daemonic)方法

该方法用于将线程的守护标志设置为布尔值后台。这必须在调用start()方法之前调用。

当没有活动的非守护线程时,整个 Python 程序就会退出。



原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/295327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-26 17:15
下一篇 2024-12-26 17:15

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29

发表回复

登录后才能评论