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
模块的 async
和 await
关键字来创建协程,每个协程执行 worker
函数,打印协程编号和执行的任务。我们使用 create_task
创建任务,并使用 wait
来等待所有协程执行完毕。最后关闭事件循环。