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(): 创建一个线程局部对象。

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

目录
相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
338 7
|
2月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
373 4
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
276 0
|
2月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
188 0
|
安全 Python
Python并发编程必备技能:掌握threading模块,让你的代码跑得更快!
【8月更文挑战第22天】Python并发编程采用多线程技术实现任务的同时执行。利用`threading`模块可轻松管理和创建线程。通过`Thread`类实例化线程并用`start()`方法启动。线程同步通过`Lock`确保资源访问互斥,或用`Semaphore`控制并发数量。线程间通信则可通过`Queue`安全传递数据,实现生产者-消费者模式等功能。这些工具有效避免了竞态条件,确保了程序的正确性和效率。
226 1
|
数据采集 Java Python
Python并发编程:多线程(threading模块)
Python是一门强大的编程语言,提供了多种并发编程方式,其中多线程是非常重要的一种。本文将详细介绍Python的threading模块,包括其基本用法、线程同步、线程池等,最后附上一个综合详细的例子并输出运行结果。
|
数据采集 Java Python
Python并发编程:多线程(threading模块)
本文详细介绍了Python的threading模块,包括线程的创建、线程同步、线程池的使用,并通过多个示例展示了如何在实际项目中应用这些技术。通过学习这些内容,您应该能够熟练掌握Python中的多线程编程,提高编写并发程序的能力。 多线程编程可以显著提高程序的并发性能,但也带来了新的挑战和问题。在使用多线程时,需要注意避免死锁、限制共享资源的访问,并尽量使用线程池来管理和控制线程。
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
454 5
|
Python
Python中的多线程可以使用`threading`模块来实现。以下是一个简单的多线程示例,该示例启动两个线程并让它们分别打印数字。
在Python中,使用`threading`模块可实现多线程。以下代码展示了一个简单的例子:创建两个线程`t1`和`t2`,分别打印1-6和6-11的数字。通过`target`参数指定执行函数`print_numbers`,`args`传递参数。启动线程后,用`join()`确保线程执行完毕。注意,多线程访问共享资源可能引发数据竞争,需用锁进行同步控制。
143 0
|
安全 Python Windows
Python 的并发编程:在 Python 中如何使用 `threading` 和 `multiprocessing` 模块?
Python 的并发编程:在 Python 中如何使用 `threading` 和 `multiprocessing` 模块?
170 1

推荐镜像

更多