برنامه نویسی
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کامل می کند.



