欢迎访问宙启技术站
智能推送

使用异步编程在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_operationcpu_operation,分别模拟了一个耗时的IO操作和计算密集型的操作。

然后,我们定义了一个异步函数run_operations,用于调度并发执行的任务。在该函数中,我们创建了一个事件循环,并使用asyncio.ensure_future函数将需要并发执行的任务添加到任务列表中。然后,调用asyncio.wait函数等待任务完成。

最后,在主程序中,我们使用asyncio.run函数启动异步函数run_operations,并使用time模块计算了并发操作的总耗时。

运行上述代码,控制台会输出每个任务的开始和结束信息,并最后输出总耗时。

总结起来,使用异步编程可以实现并发操作,并在一些耗时的IO任务和计算密集型的任务中提高程序的运行效率。同时,Python提供的asyncio模块对协程的支持使得编写异步代码更加简洁和易于维护。