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

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

目录
相关文章
|
1月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
10天前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
31 8
|
8天前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
21 4
|
8天前
|
JSON 监控 API
python语言采集淘宝商品详情数据,json数据示例返回
通过淘宝开放平台的API接口,开发者可以轻松获取商品详情数据,并利用这些数据进行商品分析、价格监控、库存管理等操作。本文提供的示例代码和JSON数据解析方法,可以帮助您快速上手淘宝商品数据的采集与处理。
|
14天前
|
Go Python
Python中的round函数详解及使用示例
`round()`函数是Python内置的用于四舍五入数字的工具。它接受一个数字(必需)和可选的小数位数参数,返回最接近的整数或指定精度的浮点数。本文详细介绍其用法、参数及示例,涵盖基本操作、负数处理、特殊情况及应用建议,帮助你更好地理解和运用该函数。
|
2月前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
92 21
|
2月前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
47 10
|
20天前
|
SQL 关系型数据库 MySQL
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。
|
7天前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
7天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。

热门文章

最新文章