推荐答案
在 Python 中,async
和 await
关键字用于定义和操作异步函数。它们的主要作用是简化异步编程,使得编写异步代码更加直观和易于理解。
async
用于定义一个异步函数(也称为协程)。异步函数在执行时不会阻塞主线程,而是会在遇到await
时暂停执行,直到等待的操作完成。await
用于暂停异步函数的执行,直到等待的异步操作完成。它只能在async
函数中使用。
本题详细解读
async
关键字
async
关键字用于定义一个异步函数。异步函数与普通函数的区别在于,异步函数在执行时不会阻塞主线程,而是会在遇到 await
时暂停执行,直到等待的操作完成。
async def my_async_function(): print("Start") await asyncio.sleep(1) print("End")
在上面的例子中,my_async_function
是一个异步函数。当调用这个函数时,它会立即返回一个协程对象,而不是立即执行函数体。协程对象需要通过事件循环来调度执行。
await
关键字
await
关键字用于暂停异步函数的执行,直到等待的异步操作完成。它只能在 async
函数中使用。
async def my_async_function(): print("Start") await asyncio.sleep(1) # 暂停执行,等待 1 秒 print("End")
在上面的例子中,await asyncio.sleep(1)
会暂停 my_async_function
的执行,直到 asyncio.sleep(1)
完成。在此期间,事件循环可以调度其他任务执行。
异步编程的优势
使用 async
和 await
可以编写非阻塞的代码,使得程序在等待 I/O 操作(如网络请求、文件读写等)时不会阻塞主线程,从而提高程序的并发性能。
-- -------------------- ---- ------- ------ ------- ----- --- ------------- --------------- --------- ----- ---------------- - ------ ----------- --------- ----- --- ------- ----- ---------------------------- ------------- -------------------
在上面的例子中,fetch_data
函数模拟了一个网络请求,main
函数并发地执行了两个 fetch_data
任务。由于使用了 async
和 await
,这两个任务可以并发执行,而不会阻塞主线程。
总结
async
用于定义异步函数,使得函数可以在遇到await
时暂停执行。await
用于暂停异步函数的执行,直到等待的异步操作完成。- 使用
async
和await
可以编写非阻塞的代码,提高程序的并发性能。