Python 并发编程实战:多线程、多进程与线程池
在开发高性能应用时,如何充分利用系统资源是关键。Python 的并发编程主要涉及多线程和多进程两种模式,它们分别适用于不同的任务场景。本文将深入探讨这两种机制的核心用法,并通过实际案例展示如何高效构建并发程序。
并发编程概述
并发编程允许程序同时执行多个任务,从而提升整体效率。理解 CPU 密集型与 I/O 密集型任务是选择并发策略的基础。
- CPU 密集型:如数学计算、数据处理。这类任务受限于 CPU 核心数,通常更适合多进程。
- I/O 密集型:如文件读写、网络请求。这类任务大部分时间在等待,多线程能显著减少等待时间。
多线程编程
Python 的 threading 模块提供了创建和管理线程的能力。不过要注意,由于 GIL(全局解释器锁)的存在,多线程并不能真正并行执行 CPU 密集型任务,但在 I/O 操作上非常有效。
线程的创建与管理
创建一个线程很简单,只需继承 Thread 类或传入目标函数。下面是一个基础示例:
import threading
import time
def thread_function(name):
print(f'线程 {name} 开始')
time.sleep(2)
print(f'线程 {name} 结束')
# 创建线程
thread1 = threading.Thread(target=thread_function, args=('Thread 1',))
thread2 = threading.Thread(target=thread_function, args=('Thread 2',))
# 启动线程
thread1.start()
thread2.start()
# 等待线程结束
thread1.join()
thread2.join()
print('所有线程结束')
线程同步与互斥
当多个线程访问共享资源时,必须使用锁来防止数据竞争。Lock 是最常用的同步原语。
import threading
import time
counter = 0
lock = threading.Lock()
def ():
counter
()
lock.acquire()
:
counter +=
()
:
lock.release()
time.sleep()
()
threads = []
i ():
thread = threading.Thread(target=thread_function, args=(,))
threads.append(thread)
thread.start()
thread threads:
thread.join()
()


