📅  最后修改于: 2023-12-03 14:51:36.507000             🧑  作者: Mango
asyncio
是Python 3.4引入的标准库,是一个异步I/O库,可以用来编写高效的并发代码。本文将介绍asyncio
基本语法。
在asyncio
中,使用协程(coroutine)进行异步编程。协程是一种轻量级的线程,可以看作是一种用户级别的线程,相比于操作系统层面的线程,协程更加高效。
在Python中使用协程,需要用到关键字async
和await
。
import asyncio
async def hello():
print("Hello")
await asyncio.sleep(1)
print("World")
loop = asyncio.get_event_loop()
loop.run_until_complete(hello())
在上面的代码中,我们定义了一个名为hello
的协程,使用async def
关键字来定义。协程内部使用await
关键字来等待异步操作完成,比如等待asyncio.sleep()
完成。
在程序的最后,我们创建了一个事件循环(event loop),并使用run_until_complete()
方法来运行hello()
协程。
在asyncio
中,可以使用asyncio.Task
来包装协程,从而将协程提交给事件循环进行调度。
import asyncio
async def hello():
print("Hello")
await asyncio.sleep(1)
print("World")
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(hello())
loop.run_until_complete(task)
在上面的代码中,我们使用asyncio.ensure_future()
方法将hello()
协程包装成一个任务(task),然后将任务提交给事件循环进行调度。
在asyncio
中,可以使用回调来处理异步操作完成的结果。使用asyncio.Future
表示异步操作的返回结果,当异步操作完成后,调用Future.set_result()
方法设置结果。
import asyncio
async def slow_add(a, b):
await asyncio.sleep(1)
return a + b
def got_result(future):
print(future.result())
loop = asyncio.get_event_loop()
future = asyncio.Future()
asyncio.ensure_future(slow_add(3, 4)).add_done_callback(got_result)
loop.run_until_complete(asyncio.sleep(2))
在上面的代码中,我们定义了一个协程slow_add
,模拟一个耗时的加法操作。在main()
函数中,我们创建一个asyncio.Future
实例,使用add_done_callback()
方法设置回调函数got_result
。当slow_add
协程执行完成时,会调用回调函数,并将结果传递给回调函数。
asyncio
是Python中强大的异步I/O库,可以用于编写高效的并发代码。Python的协程模型是异步编程的重要手段,可以使用async
和await
关键字编写协程。asyncio.Task
可以用于包装协程,通过事件循环进行调度。asyncio.Future
可以用于处理异步操作的结果,使用回调来处理操作完成后的结果。