Python编程【多线程编程】

Python 多线程编程深入解析

1. Python 线程模型

Python 的 threading 模块基于 操作系统原生线程(POSIX 线程或 Windows 线程),但由于 GIL(全局解释器锁) 的限制,Python 线程 不能真正并行执行 Python 代码,但对于 IO 密集型任务(文件、网络、数据库操作) 仍然非常有用。

1.1 GIL(全局解释器锁)详解

GIL 限制了同一时间只有一个线程在执行 Python 字节码。即使是多核 CPU,Python 线程也不会真正并行执行,而是通过 轮流切换 的方式运行。

GIL 影响的测试

以下代码创建 2 个线程,每个线程执行 10^7 次循环。由于 GIL 限制,多线程反而比单线程更慢:

import threading
import time

COUNT = 10**7

def cpu_bound_task():
    x = 0
    for _ in range(COUNT):
        x += 1

start = time.time()

t1 = threading.Thread(target=cpu_bound_task)
t2 = threading.Thread(target=cpu_bound_task)

t1.start()
t2.start()
t1.join()
t2.join()

print("多线程耗时:", time.time() - start)

# 单线程
start = time.time()
cpu_bound_task()
cpu_bound_task()
print("单线程耗时:", time.time() - start)
结论:

CPU 任务 不适合多线程,应使用 multiprocessing。
IO 任务(如网络请求、文件操作)适合多线程。

2. 线程同步与安全

由于多个线程可能同时访问同一变量,容易导致竞态条件(Rac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值