Python 基础入门 Day10

Python 基础入门 Day10

欢迎来到 Python 基础入门 Day10!恭喜你已经坚持学习到第十天了!在过去的几天里,我们陆续学习了 Python 的基础语法、数据结构、函数、面向对象编程,以及一些高级特性(如生成器、装饰器和上下文管理器)。今天,我们将深入了解 Python 的多线程与多进程编程,帮助你写出更高效、更快速的代码。

如果你错过了前面的课程,可以点击以下链接进行复习:


目录

  1. 线程与多线程
  2. 进程与多进程
  3. Python threading 模块
  4. Python multiprocessing 模块
  5. 综合实例:多线程与多进程的应用
  6. 小结与练习

一、线程与多线程

1.1 什么是线程?

线程是操作系统能够进行运算调度的最小单位,线程被包含在进程之中,是进程中的实际运作单位。

1.2 使用多线程的优势

  • 提升程序执行速度:尤其在 I/O 密集型任务中效果显著,如文件读写、网络请求。
  • 资源共享:多个线程共享全局变量和数据,通信成本低。

二、进程与多进程

2.1 什么是进程?

进程是操作系统分配资源的基本单位,每个进程拥有独立的内存空间。Python 中每个程序默认都是一个进程。

2.2 使用多进程的优势

  • 适合 CPU 密集型任务:如复杂计算、数据处理等。
  • 避免 GIL 限制:Python 的 GIL(全局解释器锁)会限制多线程的并发能力,而多进程可以绕开这一限制。

三、Python threading 模块

threading 模块是 Python 标准库中用于实现多线程的模块。

3.1 创建线程

import threading def print_numbers(): for i in range(5): print(i) # 创建线程 t = threading.Thread(target=print_numbers) t.start() t.join() # 等待线程完成

3.2 线程锁(Lock)

lock = threading.Lock() def thread_task(): with lock: # 线程安全操作 print("安全操作") threading.Thread(target=thread_task).start()


四、Python multiprocessing 模块

multiprocessing 模块提供了与 threading 模块类似的接口,用于实现多进程。

4.1 创建进程

from multiprocessing import Process def print_numbers(): for i in range(5): print(i) # 创建进程 p = Process(target=print_numbers) p.start() p.join()

4.2 进程间通信

使用 Queue 实现进程间数据传递:

from multiprocessing import Process, Queue def producer(q): q.put("Hello from Process") def consumer(q): print(q.get()) queue = Queue() p1 = Process(target=producer, args=(queue,)) p2 = Process(target=consumer, args=(queue,)) p1.start() p2.start() p1.join() p2.join()


五、综合实例:多线程与多进程的应用

5.1 多线程处理文件读写

import threading def read_file(filename): with open(filename, 'r') as file: print(file.read()) thread1 = threading.Thread(target=read_file, args=('file1.txt',)) thread2 = threading.Thread(target=read_file, args=('file2.txt',)) thread1.start() thread2.start() thread1.join() thread2.join()

5.2 多进程计算密集型任务

from multiprocessing import Pool def compute_square(n): return n * n if __name__ == "__main__": with Pool(4) as pool: result = pool.map(compute_square, range(10)) print(result)


六、小结与练习

今天我们学习了 Python 的 多线程与多进程 编程。掌握这些知识将帮助你提高程序的执行效率,尤其是在处理 I/O 密集型和 CPU 密集型任务时。

今日练习题:

  1. 使用多线程实现文件的并发读取。
  2. 使用多进程实现列表中元素的并行平方计算。
  3. 编写一个程序,比较多线程和多进程在处理相同任务时的性能差异。
  4. 使用 Queue 实现多进程间的通信。

下一节预告:在 Day11 中,我们将深入探讨 Python 的异步编程(Asyncio),学习如何进一步优化程序性能,敬请期待!

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注