Python 中的基于线程的并行性

2024 年 8 月 29 日 | 4 分钟阅读

线程在计算机科学中是一组命令,可以被操作系统的一部分调度器单独控制

线程用于同时运行多个线程。线程意味着程序中的多个任务和函数调用。一个多线程程序有子程序,由各个线程管理。软件执行的并行性通过多线程实现活动的线程同时运行并共享 CPU 资源,从而加快程序执行速度。

多线程的用途

  • 当主程序必须整合子程序的输出时,会使用多线程。
  • 当主程序有独立的代码时,会使用多线程。

Python 中的线程模块

Python 提供了一个名为 threading 的强大模块,它支持不同的线程。

它提供了各种用于获取线程及其相关数据的功能。此外,这些函数会自动执行。这些函数和方法是

  1. threading.active_count(): 此函数返回当前运行的活动线程数。返回的计数是 enumerate() 函数返回的列表的长度。
  2. threading.get_ident(): 此函数用作正在运行线程的线程标识符。它是一个非零整数
  3. threading.enumerate(): enumerate 函数返回一个当前正在运行的所有活动线程的列表,包括守护线程。
  4. threading.current_thread: 此函数提供当前线程对象,它对应于调用者的线程对象。如果调用者的控制线程不是使用 threading 模块生成的,则会返回一个功能有限的虚拟线程对象。
  5. threading.main_thread(): 它返回主线程对象
  6. threading.setprofile(func): 在从模块启动任何线程时使用此函数。在执行 run() 方法之前,此函数会传递给每个线程的 sys.setprofile()
  7. threading.stack_size([size]): 它返回线程堆栈大小。在创建新线程时使用。
  8. threading.settrace(func): 在从模块启动任何线程时使用此函数。在执行 run() 方法之前,此函数会传递给每个线程的 sys.settrace()
  9. threading.TIMEOUT_MAX: 这是一个具有最大值的常量,用于阻塞函数的超时参数(Lock.acquire()、RLock.acquire()、Condition.wait() 等)

在 Python 中导入 threading 模块

让我们在 Python 中实现线程概念。

创建新线程

threading 模块用于创建新线程。创建的新线程中的数据通过 __init__ 函数进行初始化。run 函数定义了新线程开始执行后的行为。

我们必须遵循以下步骤来创建新线程

  1. 我们必须创建一个线程类的子类。
  2. 现在,重写线程类的 __init__ 函数。它将初始化线程的数据。
  3. 然后,重写 run 方法,该方法有助于定义线程的行为。

程序 1:在 Python 中创建新线程的程序。

代码

输出

Creating new threads
JTP  2300
Javatpoint  5000
Exit

说明

在此,我们首先导入了 threading 模块。然后,我们创建了一个名为 new_thread 的类,然后使用 __init__ 函数初始化了 threading 类。然后使用 run() 函数定义了线程函数。然后我们创建了两个带有 ID 的线程对象。然后,我们将启动线程创建;它将打印线程名称和 ID。

程序 2:说明 Python 中线程及其功能的程序。

代码

输出

Name of  the main thread : MainThread
Identity of the main thread : 10528
Stack size is : 0
Passing the trace function
None
Set the profile of thread: MainThread
1500
Total Number of active threads: 7
Name of the current thread: Thread-19
2900
Total Number of active threads: 7
Name of the current thread: Thread-20
Enumeration list : 
[<_MainThread(MainThread, started 10528)>, , , , , ]
Exit

说明

我们首先导入了 threading 模块。然后,我们调用了两个函数用于跟踪函数设置线程的配置。然后我们创建了一个线程类,然后初始化了线程的数据。然后我们需要打印线程的详细信息,例如它的名称、身份枚举列表