📜  Python中的多处理 |第 1 套(介绍)(1)

📅  最后修改于: 2023-12-03 15:19:28.554000             🧑  作者: Mango

Python中的多处理 |第 1 套(介绍)

在 Python 中,多处理是一个重要的主题,特别是在大型程序或需要处理大量数据的情况下。多处理是指同时运行多个线程或进程来提高程序的并行执行速度。Python支持多种多处理技术,包括多线程、多进程和协程等。

多线程

多线程是指在同一进程中并行运行多个线程。每个线程都可以独立执行,并且共享同一进程的资源。Python 的 threading 模块提供了一个简单的接口,用于创建和管理线程。

以下是一个简单的 Python 多线程示例:

import threading

def worker():
    """线程函数,每个线程都执行该函数"""
    print('线程开始执行...')
    # 停留 1 秒钟
    time.sleep(1)
    print('线程执行完成!')

threads = []
for i in range(5):
    t = threading.Thread(target=worker)
    threads.append(t)
    t.start()

for t in threads:
    t.join()

在上面的示例中,创建了 5 个线程并分别启动。所有线程都在指定的 worker() 函数中执行。join() 函数用于等待所有线程执行完成。注意在 Windows 系统下,由于 GIL(全局解释器锁)的限制,Python 的多线程执行速度不会比单线程更快。

多进程

多进程是指在同一系统中并行运行多个进程。每个进程都拥有自己的地址空间、内存、文件句柄等系统资源。Python 的 multiprocessing 模块提供了一个简单的接口,用于创建和管理进程。

以下是一个简单的 Python 多进程示例:

import multiprocessing

def worker():
    """进程函数,每个进程都执行该函数"""
    print('进程开始执行...')
    # 停留 1 秒钟
    time.sleep(1)
    print('进程执行完成!')

processes = []
for i in range(5):
    p = multiprocessing.Process(target=worker)
    processes.append(p)
    p.start()

for p in processes:
    p.join()

在上面的示例中,创建了 5 个进程并分别启动。所有进程都在指定的 worker() 函数中执行。join() 函数用于等待所有进程执行完成。与多线程相比,Python 的多进程执行速度并不会受到 GIL 的限制。

协程

协程是一种轻量级的线程,它可以在一个线程中并发执行。协程通常用于 I/O 密集型场景,比如网络通信、文件读写等。Python 的 asyncio 模块提供了一个简单的接口,用于创建和管理协程。

以下是一个简单的 Python 协程示例:

import asyncio

async def worker():
    """协程函数,每个协程都执行该函数"""
    print('协程开始执行...')
    # 停留 1 秒钟
    await asyncio.sleep(1)
    print('协程执行完成!')

async def main():
    """主函数,用于启动协程"""
    coroutines = [worker() for i in range(5)]
    await asyncio.gather(*coroutines)

# 执行主函数
asyncio.run(main())

在上面的示例中,创建了 5 个协程并分别启动。所有协程都在指定的 worker() 函数中执行。asyncio.gather() 函数用于等待所有协程执行完成。需要注意的是,协程需要在异步编程模型中使用,通常需要特定的支持库和框架来简化编程。