asyncio 运行或 run_until_complete

python

1个回答

写回答

463578559

2025-06-23 08:25

+ 关注

Python
Python

使用 asyncio 运行或 run_until_complete 运行异步任务

在编写并发程序时,我们经常需要处理多个任务同时进行的情况。传统的多线程或多进程处理方式可能会带来一些复杂性和性能问题。Python 提供了 asyncio 模块,用于编写并发的异步程序,通过使用协程(coroutines)来实现任务的并发执行。在 asyncio 中,我们可以使用 run_until_complete 方法或直接运行 asyncio.run 函数来启动异步任务的执行。

什么是 asyncio

asyncio 是 Python 3.4 引入的一种用于编写异步程序的框架。它提供了一种基于事件循环的模型,通过协程来实现异步任务的调度和执行。asyncio 的核心思想是将耗时的 I/O 操作交给事件循环处理,而不是等待这些操作完成。这种方式能够使得程序在等待 I/O 操作时不被阻塞,从而提高程序的并发性能。

如何使用 asyncio 运行异步任务

在 asyncio 中,我们可以通过创建协程对象来定义一个异步任务。协程对象可以通过 async 关键字和 awAIt 关键字来定义和调用。为了运行异步任务,我们需要创建一个事件循环对象,并将任务交给事件循环来调度执行。当所有任务执行完毕或达到设定的条件时,事件循环将停止运行。

下面是一个使用 run_until_complete 方法运行异步任务的示例代码:

Python

import asyncio

async def task():

print("Start task")

awAIt asyncio.sleep(1)

print("End task")

loop = asyncio.get_event_loop()

loop.run_until_complete(task())

loop.close()

在上面的示例中,我们定义了一个名为 task 的异步任务。该任务会先打印出 "Start task",然后等待 1 秒钟,最后再打印出 "End task"。我们使用 run_until_complete 方法将任务传给事件循环并运行。

使用 asyncio.run 运行异步任务

除了使用 run_until_complete 方法,Python 3.7 以后的版本还引入了 asyncio.run 函数,用于运行异步任务。下面是一个使用 asyncio.run 函数运行异步任务的示例代码:

Python

import asyncio

async def task():

print("Start task")

awAIt asyncio.sleep(1)

print("End task")

asyncio.run(task())

在上面的示例中,我们直接调用了 asyncio.run 函数,并将任务传给它来执行。asyncio.run 函数内部会自动创建一个事件循环对象,并在任务完成后关闭事件循环。

使用 asyncio 运行多个异步任务

在实际开发中,我们经常需要同时运行多个异步任务。asyncio 提供了多种方法来实现这一点。其中一种常用的方式是使用 asyncio.gather 函数来并发运行多个任务。下面是一个使用 asyncio.gather 函数运行多个异步任务的示例代码:

Python

import asyncio

async def task1():

print("Start task 1")

awAIt asyncio.sleep(1)

print("End task 1")

async def task2():

print("Start task 2")

awAIt asyncio.sleep(2)

print("End task 2")

async def mAIn():

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

asyncio.run(mAIn())

在上面的示例中,我们定义了两个异步任务 task1task2。在 mAIn 函数中,我们使用 asyncio.gather 函数将这两个任务并发运行。运行结果可能会交替打印 "Start task" 和 "End task",这取决于任务之间的执行顺序。

使用 asyncio 运行或 run_until_complete 运行异步任务可以帮助我们实现并发执行多个任务的目的。通过使用协程和事件循环,我们可以充分利用计算机的资源,提高程序的并发性能。同时,asyncio 还提供了丰富的工具和函数来简化异步编程的操作,使得开发异步程序变得更加容易。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号