如何在Python中进行并发编程?代码举例讲解

Python中并发编程主要有以下几种方式:

1. 多线程:

  • 使用threading模块创建线程,并执行任务。
  • 线程之间需要使用锁(Lock)来同步访问共享数据。
  • 多线程适用于I/O密集型任务,CPU密集型任务不太适用(Python GIL机制的限制)。
import threading

lock = threading.Lock()

def task1():
    lock.acquire() 
    print('Task 1 running')
    # do something...
    lock.release()

def task2():
    lock.acquire() 
    print('Task 2 running')
    # do something...
    lock.release()

t1 = threading.Thread(target=task1)
t2 = threading.Thread(target=task2)
t1.start()
t2.start()

2. 多进程:

  • 使用multiprocessing模块创建进程,并执行任务。
  • 进程之间是完全隔离的,需要通过队列.管道等来通信。
  • 多进程可以利用多核CPU,适用于CPU密集型任务。
from multiprocessing import Process

def task1():
    print('Task 1 running')
    # do something...  

def task2():
    print('Task 2 running') 
    # do something...   

if __name__ == '__main__':
    p1 = Process(target=task1)
    p2 = Process(target=task2)
    p1.start()
    p2.start()

3. 协程:

  • 使用yield或者asyncio模块实现协程,以异步的方式执行任务。
  • 协程之间可以简单地共享数据,并且切换成本更低。
  • 协程适用于I/O密集型任务,可以实现高并发。
import asyncio

async def task1():
    print('Task 1 running')
    await asyncio.sleep(1)

async def task2():
    print('Task 2 running')
    await asyncio.sleep(2)  

asyncio.run(asyncio.gather(task1(), task2()))