Python 并发的意义

  • Post category:Python

Python 并发指的是同时执行多个任务的能力,可以大大提高程序的运行效率。常用的 Python 并发方式有多线程、多进程和协程。

Python 并发的意义

Python 并发有助于提高程序的运行效率,尤其在处理大量 IO 任务时效果更加明显,因为大量的 IO 操作会占用 CPU 时间,阻塞主线程,使得程序执行效率变慢。通过 Python 并发,可以将IO操作转移到其他线程或进程处理,使主线程可以将CPU时间用于处理其他任务,提升程序的运行效率。

多线程示例

多线程适用于 CPU 密集型任务较少的场景。下面的示例使用 Python 的 threading 模块来创建多个线程执行任务:

import threading

def worker(num):
    """线程执行的任务"""
    print(f"Thread-{num} start")
    # 任务
    print(f"Thread-{num} end")

if __name__ == '__main__':
    threads = []
    for i in range(5):
        t = threading.Thread(target=worker, args=(i+1,))
        t.start()
        threads.append(t)

    for t in threads:
        t.join()

在这个示例中,我们使用 threading 模块的 Thread 类来创建多个线程,每个线程执行 worker 函数,打印线程编号和执行的任务。我们使用 join 来等待所有线程执行完毕。

多进程示例

多进程适用于 CPU 密集型任务较多的场景。下面的示例使用 Python 的 multiprocessing 模块来创建多个进程执行任务:

import multiprocessing

def worker(num):
    """进程执行的任务"""
    print(f"Process-{num} start")
    # 任务
    print(f"Process-{num} end")

if __name__ == '__main__':
    processes = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i+1,))
        p.start()
        processes.append(p)

    for p in processes:
        p.join()

在这个示例中,我们使用 multiprocessing 模块的 Process 类来创建多个进程,每个进程执行 worker 函数,打印进程编号和执行的任务。我们使用 join 来等待所有进程执行完毕。

协程示例

协程适用于IO密集型任务较多的场景。下面的示例使用 Python 的 asyncio 模块来创建协程执行任务:

import asyncio

async def worker(num):
    """协程执行的任务"""
    print(f"Coroutine-{num} start")
    # 任务
    await asyncio.sleep(1)
    print(f"Coroutine-{num} end")

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    tasks = []
    for i in range(5):
        t = worker(i+1)
        task = loop.create_task(t)
        tasks.append(task)
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()

在这个示例中,我们使用 asyncio 模块的 asyncawait 关键字来创建协程,每个协程执行 worker 函数,打印协程编号和执行的任务。我们使用 create_task 创建任务,并使用 wait 来等待所有协程执行完毕。最后关闭事件循环。