برنامه نویسی

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())
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


در این مثال:

  1. async اعلام می کند download_file و main به صورت ناهمزمان عمل می کند.
  2. await داخل main اجرا را تا زمانی که download_file کامل می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا