首页 > 编程语言 >Python多线程使用

Python多线程使用

时间:2025-01-02 12:28:23浏览次数:3  
标签:name Thread Python threading 线程 thread2 thread1 使用 多线程

在Python中,多线程是一种利用线程并发执行任务的技术,特别适合用于I/O密集型任务(如文件操作、网络请求等)。Python的多线程可以通过`threading`模块实现。

以下是关于Python多线程的一些关键点和示例代码:

---

### **1. 基本概念**
- **线程**是一个轻量级的执行单元,与进程不同,多个线程共享同一个进程的内存空间。
- 在Python中,由于**全局解释器锁(GIL)**的限制,多线程在CPU密集型任务中可能无法提高性能。
- 适用场景:I/O密集型任务(如网络请求、文件读写)。

---

### **2. 使用 `threading` 模块**
#### **创建线程**
```python
import threading
import time

def task(name):
    print(f"Thread {name} is starting...")
    time.sleep(2)
    print(f"Thread {name} is done!")

# 创建线程
thread1 = threading.Thread(target=task, args=("A",))
thread2 = threading.Thread(target=task, args=("B",))

# 启动线程
thread1.start()
thread2.start()

# 等待线程完成
thread1.join()
thread2.join()

print("All threads are finished.")
```

---

#### **使用类方式创建线程**
```python
class MyThread(threading.Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print(f"Thread {self.name} is running...")
        time.sleep(2)
        print(f"Thread {self.name} is done!")

# 创建并启动线程
thread1 = MyThread("A")
thread2 = MyThread("B")

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("All threads are finished.")
```

---

### **3. 线程锁(`Lock`)**
多线程访问共享资源时需要考虑同步问题,可以使用锁来避免竞争条件。

```python
import threading

lock = threading.Lock()
shared_counter = 0

def increment():
    global shared_counter
    for _ in range(1000000):
        with lock:  # 使用上下文管理器获取锁
            shared_counter += 1

thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=increment)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print(f"Final counter value: {shared_counter}")
```

---

### **4. 线程池(`concurrent.futures.ThreadPoolExecutor`)**
使用线程池可以简化线程管理。

```python
from concurrent.futures import ThreadPoolExecutor
import time

def task(name):
    print(f"Task {name} is starting...")
    time.sleep(2)
    print(f"Task {name} is done!")

with ThreadPoolExecutor(max_workers=3) as executor:
    executor.submit(task, "A")
    executor.submit(task, "B")
    executor.submit(task, "C")
```

---

### **5. 注意事项**
- **避免死锁**:确保锁的获取顺序一致。
- **线程安全问题**:当多个线程访问共享资源时,需要用锁保护。
- **性能限制**:对于CPU密集型任务,使用`multiprocessing`可能更合适。

如果你有特定的应用场景或疑问,可以进一步讨论!

标签:name,Thread,Python,threading,线程,thread2,thread1,使用,多线程
From: https://blog.csdn.net/Zero_pl/article/details/144883591

相关文章

  • 鸿蒙 NEXT 开发中,使用公共事件进行进程间通信
    大家好,我是V哥,在鸿蒙NEXT开发中,使用公共事件进行进程间通信(IPC)是一种常见的做法。下面我将提供一个完整的业务代码示例,并解释逻辑关系,以便即使是初学者也能按照步骤进行实操,废话不多说,直接上干货。业务场景假设我们有两个应用,应用A和应用B。应用A需要在电量低时通知应用B执......
  • lsync服务使用hlim用户进行同步配置
    一、首先两台服务器做hlim用户的免密ssh登录su-hlimssh-keygen-trsassh-keygen-trsa-f/home/hlim/.ssh/id_rsa-P""在目标服务器上执行,将另外一台服务器的/home/hlim/.ssh/id_rsa.pub内容复制到/home/hlim/^Csh/authorized_keys中 su-hlimvim.ssh/authorize......
  • 使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用
    实验四使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用实验内容选择一个系统调用(13号系统调用time除外),系统调用列表参见torvalds/linux。参考视频中的方式使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用实验过程使用库函数API#......
  • Python实现Zip文件的暴力破解
    Python实现Zip文件的暴力破解实验内容我们在网上好不容易下载到一个想要的zip资源却发现这个zip文件是加密的,或者忘掉自己压缩后的密码(一想到就头疼)。这时候我们就会想办法,将里面的内容提取出来。我目前已知的破解zip的方式只有“Knownplaintextattack(已知明文攻击)”......
  • Python OpenCV 图像处理中的应用实例
    1.图像读取与显示这是图像处理的第一步,也是最简单的一步。使用OpenCV读取图像并显示它。importcv2#读取图像image=cv2.imread('example.jpg')#显示图像cv2.imshow('Image',image)cv2.waitKey(0)#等待按键cv2.destroyAllWindows()#关闭所有窗口2.图像......
  • 《DNK210使用指南 -CanMV版 V1.0》第四十八章 自学习分类实验
    第四十八章自学习分类实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点......
  • WxPython跨平台开发框架之动态菜单的管理和功能权限的控制
    在一个业务管理系统中,如果我们需要实现权限控制功能,我们需要定义好对应的权限功能点,然后在前端界面中对界面元素的可用性和功能点进行绑定,这样就可以在后台动态分配权限进行动态控制了,一般来说,权限功能点是针对角色进行控制的,也就是简称RBAC(RoleBasedAccessControl)。对于登录系......
  • 项目44:简易拼写检查器【源代码】 --- 《跟着小王学Python·新手》
    项目44:简易拼写检查器—《跟着小王学Python·新手》《跟着小王学Python》是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬......
  • Python知识点精汇:异常信息及如何捕获
    目录一、什么是异常二、异常信息(1)如何去找(2)异常信息有哪些三、捕获异常(1)捕获所有异常(2)捕获特定异常(3)捕获多个异常(4)捕获特定异常后改为别名(5)对多个异常作出多个处理(6)其他查找异常信息,直接翻看(2)异常信息有哪些一、什么是异常    简单来说,程序在运行时,如......
  • Sqoop其一,理论、安装、使用、import和export简单示例
    目录一、理论二、安装三、使用一下四、import命令import导入命令的参数:将mysql的数据导入到HDFSMySQL数据导入到Hive【是sqoop的优点,别人还没有】增量导入数据:五、Sqoop的export从hdfs导出到mysql从hive导出到mysql[最重要的]一、理论Sqoop是一个数......