Python 基础入门 Day10

74次阅读
没有评论

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

欢迎来到 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),学习如何进一步优化程序性能,敬请期待!

正文完
 0
评论(没有评论)