Python中threading模块的常用方法和示例

简介: Python 的 `threading` 模块提供了多线程编程的能力,允许同时执行多个线程。主要类包括 `Thread`、`Lock` 和 `Condition`。`Thread` 类用于创建和管理线程,`Lock` 用于同步线程,防止资源竞争,`Condition` 用于线程间协调。本文介绍了这些类的常用方法及示例代码,帮助你更好地理解和使用多线程编程。

Python中threading模块的常用方法和示例

Hi,大家好!这里是肆十二!

视频教程地址:【2024毕设系列】Anaconda和Pycharm如何使用_哔哩哔哩

Python的threading模块提供了多线程编程的能力,允许在同一时间内执行多个线程。下面是threading模块的一些常用方法和示例:

1. Thread类

Thread类是threading模块的主要类,用于表示一个线程。

常用方法:

  • __init__(self, group=None, target=None, name=None, args=(), kwargs={}, daemon=None)
    

    : 构造函数,创建一个新的线程对象。

    • target: 线程要执行的函数。
    • name: 线程名。
    • args: 传递给目标函数的参数元组。
    • kwargs: 传递给目标函数的参数字典。
    • daemon: 设置线程是否为守护线程。
  • start(): 开始执行线程。

  • run(): 定义线程功能的方法(通常在子类中重写)。

  • join(timeout=None): 等待线程终止。

  • is_alive(): 返回线程是否还存活。

  • setName(name): 设置线程名。

  • getName(): 获取线程名。

示例:

import threading  
import time  

def worker(number):  
    print(f"Worker {number} is starting.")  
    time.sleep(2)  
    print(f"Worker {number} is done.")  

# 创建线程对象  
threads = []  
for i in range(5):  
    t = threading.Thread(target=worker, args=(i,))  
    threads.append(t)  
    t.start()  

# 等待所有线程完成  
for t in threads:  
    t.join()  

print("All workers are done.")

2. Lock(锁)

Lock类用于同步线程,防止同时访问共享资源。

常用方法:

  • acquire(blocking=True, timeout=-1): 获取锁。
  • release(): 释放锁。

示例:

import threading  

counter = 0  
lock = threading.Lock()  

def increment_counter():  
    global counter  
    with lock:  
        counter += 1  

threads = []  
for _ in range(1000):  
    t = threading.Thread(target=increment_counter)  
    threads.append(t)  
    t.start()  

for t in threads:  
    t.join()  

print(f"Final Counter: {counter}")

3. Condition(条件变量)

Condition类用于线程间的协调,允许线程等待特定条件发生。

常用方法:

  • acquire(): 获取锁。
  • release(): 释放锁。
  • wait(timeout=None): 等待条件变量。
  • notify(n=1): 通知一个或多个等待的线程。
  • notifyAll(): 通知所有等待的线程。

示例:

import threading  

class ProducerConsumer:  
    def __init__(self):  
        self.condition = threading.Condition()  
        self.items = []  

    def producer(self):  
        with self.condition:  
            for i in range(5):  
                print(f"Producing item {i}")  
                self.items.append(i)  
                self.condition.notify()  
                self.condition.wait()  

    def consumer(self):  
        with self.condition:  
            while True:  
                self.condition.wait()  
                if self.items:  
                    item = self.items.pop(0)  
                    print(f"Consuming item {item}")  
                    self.condition.notify()  
                else:  
                    break  

# 使用示例  
pc = ProducerConsumer()  
producer_thread = threading.Thread(target=pc.producer)  
consumer_thread = threading.Thread(target=pc.consumer)  

producer_thread.start()  
consumer_thread.start()  

producer_thread.join()  
consumer_thread.join()

4. 其他常用方法和类

  • threading.active_count(): 返回当前活动的线程数。
  • threading.currentThread(): 返回当前的线程对象。
  • threading.enumerate(): 返回当前所有线程对象的列表。
  • threading.settrace(func): 为所有线程设置一个跟踪函数。
  • threading.setprofile(func): 为所有线程设置一个配置文件函数。
  • threading.Local(): 创建一个线程局部对象。

请注意,上述示例仅用于说明目的,并未考虑所有可能的边界情况和错误处理。在实际应用中,应根据需求调整和完善代码。

目录
相关文章
|
9天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
9天前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
15 1
|
11天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
13 0
|
12天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
13 0
|
12天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
15 0
|
3月前
|
安全 Python
Python并发编程必备技能:掌握threading模块,让你的代码跑得更快!
【8月更文挑战第22天】Python并发编程采用多线程技术实现任务的同时执行。利用`threading`模块可轻松管理和创建线程。通过`Thread`类实例化线程并用`start()`方法启动。线程同步通过`Lock`确保资源访问互斥,或用`Semaphore`控制并发数量。线程间通信则可通过`Queue`安全传递数据,实现生产者-消费者模式等功能。这些工具有效避免了竞态条件,确保了程序的正确性和效率。
53 1
|
3月前
|
数据采集 Java Python
Python并发编程:多线程(threading模块)
Python是一门强大的编程语言,提供了多种并发编程方式,其中多线程是非常重要的一种。本文将详细介绍Python的threading模块,包括其基本用法、线程同步、线程池等,最后附上一个综合详细的例子并输出运行结果。
|
3月前
|
数据采集 Java Python
Python并发编程:多线程(threading模块)
本文详细介绍了Python的threading模块,包括线程的创建、线程同步、线程池的使用,并通过多个示例展示了如何在实际项目中应用这些技术。通过学习这些内容,您应该能够熟练掌握Python中的多线程编程,提高编写并发程序的能力。 多线程编程可以显著提高程序的并发性能,但也带来了新的挑战和问题。在使用多线程时,需要注意避免死锁、限制共享资源的访问,并尽量使用线程池来管理和控制线程。
|
6月前
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
252 5
|
6月前
|
Python
Python中的多线程可以使用`threading`模块来实现。以下是一个简单的多线程示例,该示例启动两个线程并让它们分别打印数字。
在Python中,使用`threading`模块可实现多线程。以下代码展示了一个简单的例子:创建两个线程`t1`和`t2`,分别打印1-6和6-11的数字。通过`target`参数指定执行函数`print_numbers`,`args`传递参数。启动线程后,用`join()`确保线程执行完毕。注意,多线程访问共享资源可能引发数据竞争,需用锁进行同步控制。
53 0
下一篇
无影云桌面