推荐答案
在 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 操作(如网络请求、文件读写等)时不会阻塞主线程,从而提高程序的并发性能。
// www.javascriptcn.com code example
import asyncio
async def fetch_data():
print("Fetching data...")
await asyncio.sleep(2) # 模拟网络请求
print("Data fetched")
async def main():
await asyncio.gather(fetch_data(), fetch_data())
asyncio.run(main())在上面的例子中,fetch_data 函数模拟了一个网络请求,main 函数并发地执行了两个 fetch_data 任务。由于使用了 async 和 await,这两个任务可以并发执行,而不会阻塞主线程。
总结
async用于定义异步函数,使得函数可以在遇到await时暂停执行。await用于暂停异步函数的执行,直到等待的异步操作完成。- 使用
async和await可以编写非阻塞的代码,提高程序的并发性能。