برنامه نویسی
Async vs Await – انجمن DEV

تفاوت بین async
و await
هر دو async
و await
در برنامهنویسی ناهمزمان در پایتون استفاده میشوند و شما را قادر میسازد تا کدهای غیرمسدود کننده بنویسید و در عین حال سینتکس به سبک سنکرون را حفظ کنید. در اینجا یک تفکیک ساده از نقش های آنها آورده شده است:
1. async
-
تعریف:
async
کلمه کلیدی برای اعلام an استفاده می شود تابع ناهمزمان (همچنین کوروتین نامیده می شود). -
هدف: یک تابع را برای اجرای ناهمزمان علامت گذاری می کند و به آن اجازه استفاده می دهد
await
درون بدنش - نحو:
async def my_async_function():
pass
-
رفتار:
- هنگام فراخوانی، یک
async
تابع بلافاصله اجرا نمی شود. درعوض، یک شی کوروتین را برمی گرداند. - کوروتین باید باشد در انتظار یا برنامه ریزی شده برای اجرا با استفاده از یک حلقه رویداد (به عنوان مثال، از طریق
asyncio.run()
).
- هنگام فراخوانی، یک
مثال:
async def greet():
print("Hello!")
await asyncio.sleep(1) # Simulate asynchronous behavior
print("Goodbye!")
# This alone won't run the function:
result = greet() # Returns a coroutine object
# To actually execute it:
import asyncio
asyncio.run(greet())
2. await
-
تعریف:
await
کلمه کلیدی اجرای an را متوقف می کندasync
عملکرد تا زمان مورد انتظار قابل انتظار (به عنوان مثال، برنامه، کار یا آینده) تکمیل می شود. - هدف: برای “انتظار” و بازیابی نتیجه یک عملیات ناهمزمان بدون مسدود کردن کل برنامه.
- نحو:
async def my_async_function():
await some_coroutine()
-
رفتار:
- فقط قابل استفاده است داخل یک
async
تابع. - اجرای تابع را به حالت تعلیق در می آورد و حلقه رویداد را برای انجام سایر وظایف تا پایان عملیات مورد انتظار آزاد می کند.
- فقط قابل استفاده است داخل یک
مثال:
import asyncio
async def fetch_data():
print("Fetching data...")
await asyncio.sleep(2) # Simulates a network call
print("Data fetched!")
async def main():
print("Starting...")
await fetch_data() # Waits for `fetch_data` to complete
print("Done!")
asyncio.run(main())
تفاوت های کلیدی
جنبه | async |
await |
---|---|---|
هدف | یک تابع را ناهمزمان اعلام می کند. | منتظر نتیجه یک مورد قابل انتظار است. |
قرار دادن | قبل از def کلمه کلیدی برای تعریف کوروتین |
داخل یک async تابع |
اعدام | عملکرد را بلافاصله اجرا نمی کند. | تا زمانی که کار مورد انتظار تکمیل شود، اجرا را متوقف می کند. |
وابستگی | برنامه ای را تعریف می کند که می تواند از آن استفاده کند await . |
نیاز به یک async تابع معتبر باشد |
خروجی | یک شی کوروتین را برمیگرداند. | نتیجه عملیات مورد انتظار را برمی گرداند. |
مقایسه
فکر کن async
به عنوان آماده کردن کارگر که می تواند وظایف را اداره کند، و await
به عنوان مکث کرد تا کارگر کار را تمام کند یک کار خاص قبل از ادامه
مثال ترکیب هر دو
import asyncio
async def download_file(file_name):
print(f"Downloading {file_name}...")
await asyncio.sleep(2) # Simulates download time
print(f"Downloaded {file_name}!")
async def main():
print("Start")
await download_file("file1.txt")
print("End")
asyncio.run(main())
در این مثال:
-
async
اعلام می کندdownload_file
وmain
به صورت ناهمزمان عمل می کند. -
await
داخلmain
اجرا را تا زمانی کهdownload_file
کامل می کند.