Python 基础入门 Day44-Python 多线程与多进程编程入门

44次阅读
没有评论

共计 1919 个字符,预计需要花费 5 分钟才能阅读完成。

欢迎来到 Python 基础入门 Day44!今天我们将学习 Python 中的 多线程(threading) 多进程(multiprocessing) 编程。它们是实现并发执行、提升程序效率的重要手段,尤其适用于 I/O 密集型和 CPU 密集型任务。


✅ 目录

  1. 什么是并发与并行
  2. 多线程:threading 模块
  3. 多进程:multiprocessing 模块
  4. 多线程 vs 多进程
  5. 小结与练习

一、什么是并发与并行?

概念 说明
并发(Concurrency) 在同一个时间段内执行多个任务(宏观同时,微观交替)
并行(Parallelism) 多个任务真正同时执行(依赖多核 CPU)

Python 的 GIL(全局解释器锁) 会影响多线程的并行性,因此在 CPU 密集型任务 中推荐使用多进程,在 I/O 密集型任务 中使用多线程效率更高。


二、多线程:threading 模块

2.1 创建线程

import threading
import time

def task(name):
    print(f"线程 {name} 开始工作")
    time.sleep(2)
    print(f"线程 {name} 工作结束")

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

t1.start()
t2.start()

t1.join()
t2.join()

print("主线程结束")

2.2 使用类封装线程

class MyThread(threading.Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print(f"{self.name} 线程运行")
        time.sleep(1)
        print(f"{self.name} 线程结束")

t = MyThread("自定义线程")
t.start()
t.join()

2.3 多线程锁(threading.Lock)

用于防止线程同时修改共享资源导致的冲突。

lock = threading.Lock()
count = 0

def add():
    global count
    for _ in range(100000):
        with lock:
            count += 1

threads = [threading.Thread(target=add) for _ in range(5)]

[t.start() for t in threads]

[t.join() for t in threads] print(“ 最终 count 值:”, count)


三、多进程:multiprocessing 模块

多进程适用于 CPU 密集型任务 ,每个进程拥有独立内存空间。

3.1 创建进程

from multiprocessing import Process
import os

def worker(name):
    print(f"{name} 运行中,进程 ID:{os.getpid()}")

p1 = Process(target=worker, args=("进程 1",))
p2 = Process(target=worker, args=("进程 2",))

p1.start()
p2.start()

p1.join()
p2.join()

3.2 使用队列在进程间通信

from multiprocessing import Queue

def producer(q):
    for i in range(5):
        q.put(i)
        print(f"生产:{i}")

def consumer(q):
    while not q.empty():
        print(f"消费:{q.get()}")

q = Queue()
p1 = Process(target=producer, args=(q,))
p2 = Process(target=consumer, args=(q,))

p1.start()
p1.join()
p2.start()
p2.join()

四、多线程 vs 多进程

特性 多线程 多进程
内存空间 共享 独立
创建 / 销毁成本 较小 较大
GIL 影响 受限,不能真正并行计算 无 GIL 限制,适合 CPU 密集型任务
适合任务类型 I/O 密集型(网络 / 文件读写等) CPU 密集型(加密、图像处理等)

五、小结与练习

✅ 今日小结:

  • 理解并发与并行的区别。
  • 掌握 Python 中多线程的创建、锁机制与线程类封装。
  • 学习使用 multiprocessing 实现进程并行、通信。
  • 理解线程与进程各自的优势与应用场景。

💡 今日练习:

  1. 写一个多线程爬虫框架,模拟并发下载网页内容(可使用 requests.get(url))。
  2. 写一个多进程程序,实现对多个文件的并发压缩或处理。
  3. 使用线程锁实现一个安全的共享变量计数器。
  4. 使用进程队列,完成生产者—消费者模型。
正文完
 0
评论(没有评论)