Python 中的threading模块

该模块提供以下管理线程的功能:

这是上一个教程的代码片段,我们将使用它来查看threading模块提供的各种功能。

该函数返回当前活动的Thread对象的数量。

import time
import threading

def thread1(i):
    time.sleep(3)
    #print('No. printed by Thread 1: %d' %i)

def thread2(i):
    time.sleep(3)
    #print('No. printed by Thread 2: %d' %i)

if __name__ == '__main__':
    t1 = threading.Thread(target=thread1, args=(10,))
    t2 = threading.Thread(target=thread2, args=(12,))
    t1.start()
    t2.start()
    print("No. of active threads: " + threading.active_count())
    t1.join()
    t2.join()

活动线程数:3

尝试在上面的终端中运行该代码。您将看到线程数为 3 ,因为我们已经创建了 2 个线程,并且在主线程中正在进行完整的执行。

该函数将返回当前线程对象,对应调用者的控制线程(当前在调用者的控制中)。如果调用者的控制线程不是通过线程模块(例如主线程)创建的,则返回一个功能有限的伪线程对象。

import time
import threading

def thread1(i):
    time.sleep(3)
    #print('No. printed by Thread 1: %d' %i)

def thread2(i):
    time.sleep(3)
    #print('No. printed by Thread 2: %d' %i)

if __name__ == '__main__':
    t1 = threading.Thread(target=thread1, args=(10,))
    t2 = threading.Thread(target=thread2, args=(12,))
    t1.start()
    t2.start()
    print("Current thread is: " + threading.current_thread())
    t1.join()
    t2.join()

当前线程为:

该函数返回当前线程的线程标识符。这是一个非零整数值。如果我们启动了线程,那么这个方法将返回它的标识符,否则,它将返回无。

我们可以使用这个方法来索引线程特定数据的字典。当一个线程退出(停止)并创建另一个线程时,可以回收线程标识符。

threading.get_ident()

140578859194112

该方法返回当前活动的所有Thread对象的列表。该列表包括后台线程(当程序退出时,与之相关的所有后台线程都将自动终止)当前线程创建的虚拟线程对象,以及主线程。

此列表中不存在已终止的线程和尚未启动的线程。

 threading.enumerate() 

[ 、、 ]

此方法返回主 Thread对象。在正常情况下,主线程是启动 python 解释器的线程。

 threading.main_thread() 

该方法用于为使用threading模块启动的所有线程设置跟踪函数/钩子。对于每个线程,跟踪函数被传递给sys.settrace()方法,该方法在调用run()方法之前被附加到线程。

我们希望作为跟踪函数的回调函数将接收三个参数:frame(来自正在运行的代码的堆栈帧)event(一个命名通知类型的字符串)和arg(一个特定于事件的值)

def hello(frame, event, arg):
    print("Hello, I am a trace hook.")
threading.settrace(hello) 

尝试更新顶部终端中的代码。将hello函数放在主方法和语句threading.settrace(hello)之外,就在我们为线程调用start方法的语句之上。

此方法用于为从threading模块启动的所有线程设置配置文件函数。和 trace 函数一样,profile 函数也传递给每个线程的sys.setprofile()方法,在调用run()方法之前附加到线程。

 threading.setprofile(hello) 

此方法返回创建新线程时使用的线程堆栈大小。size参数是可选的,可用于设置创建后续线程所用的堆栈大小,必须为 0 或正整数(D =默认值为 0)。

如果不支持更改线程堆栈大小,则会引发运行时错误。

如果指定的堆栈大小无效,将引发值错误。

目前 32 KiB 是支持的最小堆栈大小,为解释器提供足够的堆栈空间。

除了上述指定的功能外,threading模块还定义了一个常数。如果您指定的超时值大于TIMEOUT_MAX常量的值,您将得到一个OverflowError

除了上面指定的功能之外,threading模块还提供了许多类,这些类的对象在创建和管理线程时非常有用。

以下是一些对象类型:

| 目标 | 描述 |
| 线 | 对象,表示单个执行线程。 |
| 锁 | 原始锁对象。 |
| 断续器 | RLock 或可重入锁对象为单线程提供了获取(重)已持有锁(递归锁)的能力。 |
| 情况 | 条件变量对象使一个线程等待,直到另一个线程满足某个“条件”(如状态变化或某些数据值) |
| 事件 | 这是条件变量的一个更通用的版本,可以让许多线程等待某个事件的发生,所有等待的线程只有在事件发生时才会被唤醒。 |
| 旗语 | 当线程块之间共享的有限资源不可用时,提供一个“计数器”。 |
| 有界符号 | 类似于信号量,但确保它永远不会超过初始值。 |
| 计时器 | 类似于线程,除了它在运行之前等待一段指定的时间。 |
| 屏障 | 创建一个“屏障”,指定数量的线程必须全部到达该屏障,然后才能继续运行。 |

上表简要介绍了 python threading模块中的各种对象类型。我们将在接下来的几个教程中详细讨论所有这些对象。



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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NC7MFNC7MF
上一篇 2024-10-03 23:09
下一篇 2024-10-03 23:09

相关推荐

  • Python周杰伦代码用法介绍

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    编程 2025-04-29

发表回复

登录后才能评论