📅  最后修改于: 2023-12-03 15:19:28.554000             🧑  作者: Mango
在 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() 函数用于等待所有协程执行完成。需要注意的是,协程需要在异步编程模型中使用,通常需要特定的支持库和框架来简化编程。