使用异步编程在Python中实现并发操作
发布时间:2023-12-24 07:03:29
异步编程是一种非阻塞的编程模式,可以在一个线程中同时执行多个任务,并且能够处理内部任务的阻塞,提高程序的运行效率。在Python中,使用异步编程主要涉及到协程和事件循环。
以下是一个使用异步编程实现并发操作的例子:
import time
import asyncio
# 定义一个异步函数,模拟一个耗时的IO操作
async def io_operation(name, sleep_time):
print(f'Starting IO operation {name}')
await asyncio.sleep(sleep_time)
print(f'IO operation {name} completed')
# 定义一个异步函数,模拟一个计算密集型的操作
async def cpu_operation(name, loop_times):
print(f'Starting CPU operation {name}')
for i in range(loop_times):
pass
print(f'CPU operation {name} completed')
# 定义一个异步函数,用于调度并发执行的任务
async def run_operations():
# 创建一个事件循环
loop = asyncio.get_event_loop()
# 创建任务列表
tasks = [
asyncio.ensure_future(io_operation("IO1", 2)),
asyncio.ensure_future(io_operation("IO2", 3)),
asyncio.ensure_future(cpu_operation("CPU1", 100000000)),
asyncio.ensure_future(cpu_operation("CPU2", 200000000))
]
# 执行任务并等待完成
await asyncio.wait(tasks)
# 关闭事件循环
loop.close()
# 启动并发任务
start_time = time.time()
asyncio.run(run_operations())
end_time = time.time()
# 打印总耗时
print(f'Total time: {end_time - start_time} seconds')
在上面的例子中,首先我们定义了两个异步函数,io_operation和cpu_operation,分别模拟了一个耗时的IO操作和计算密集型的操作。
然后,我们定义了一个异步函数run_operations,用于调度并发执行的任务。在该函数中,我们创建了一个事件循环,并使用asyncio.ensure_future函数将需要并发执行的任务添加到任务列表中。然后,调用asyncio.wait函数等待任务完成。
最后,在主程序中,我们使用asyncio.run函数启动异步函数run_operations,并使用time模块计算了并发操作的总耗时。
运行上述代码,控制台会输出每个任务的开始和结束信息,并最后输出总耗时。
总结起来,使用异步编程可以实现并发操作,并在一些耗时的IO任务和计算密集型的任务中提高程序的运行效率。同时,Python提供的asyncio模块对协程的支持使得编写异步代码更加简洁和易于维护。
