Python 并发的意义

  • Post category:Python

Python并发的目的是利用多个CPU核心,使程序在相同时间内完成更多的任务,从而提高程序的执行效率。并发可以通过多进程、多线程、协程等多种方式实现。

下面分别讲解这些并发方式以及使用方法:

多进程

多进程是指启动多个独立的进程来进行并发处理,每个进程有独立的内存空间,因此可以利用多核CPU来实现并发。Python中通过multiprocessing模块来实现多进程,具体代码如下:

import multiprocessing

def worker(num):
    """示例进程函数"""
    print('Worker', num)

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()

上述代码通过创建5个进程来运行worker函数,并将0~4这5个数字作为参数传递给worker函数,从而实现了多进程并发。

多线程

多线程是指在同一进程中启动多个独立的线程来进行并发处理,线程共享进程的内存空间,因此可以利用单核CPU来实现并发。Python中通过threading模块来实现多线程,具体代码如下:

import threading

def worker(num):
    """示例线程函数"""
    print('Worker', num)

if __name__ == '__main__':
    for i in range(5):
        t = threading.Thread(target=worker, args=(i,))
        t.start()

上述代码同样启动了5个并发的任务,每个任务通过一个线程来执行,从而实现了多线程并发。

协程

协程是一种轻量级的线程,可以实现在单线程中并发执行多个子任务,协程没有多线程的锁机制,可以利用更少的资源来实现并发。Python中有多种协程库,例如geventasyncio等。以下是一个使用asyncio库的示例:

import asyncio

async def worker(num):
    """示例协程函数"""
    print('Worker', num)
    await asyncio.sleep(1)  # 等待1秒

async def main():
    """示例主函数"""
    tasks = []
    for i in range(5):
        tasks.append(asyncio.create_task(worker(i)))  # 添加5个协程任务
    await asyncio.gather(*tasks)

if __name__ == '__main__':
    asyncio.run(main())

上述代码通过asyncio.create_task方法创建了5个协程任务,并通过asyncio.gather方法将5个协程任务加入事件循环中并等待执行完成。协程任务的执行需要依靠事件循环,因此需要在程序的入口处使用asyncio.run方法启动事件循环。

这些就是Python进行并发处理的几种常见方式,需要根据具体的场景选择适合的并发方式来提高程序的执行效率。