منبع اصلی نوشتار زیر در این لینک قرار دارد

Async در پایتون

Async در پایتون

در این آموزش به صورت ساده با سینتکس برنامه نویسی Async در پایتون و اسفاده از کلمات کلیدی async و await آشنا می‌شویم.

هدف از این آموزش صرفا آشنایی با این سینتکس به منظور استفاده از کتابخانه ها و فریمورک های Async که از asyncio پشتیبانی می‌کنند، می‌باشد.

برنامه نویسی Async کاربرد ها و مفاهیم گسترده ای دارد که در دوره ای مجزا و جامع می‌توان کامل تر به آن ها پرداخت.

 

Async/await

دو کلمه کلیدی پایتون هستند که از نسخه 3.5 پایتون به منظور ساده تر نوشتن کد های ایسینک به پایتون اضافه شده اند.

 

async

برای نوشتن فانکشن های async در پایتون از این کلمه کلیدی استفاده می‌کنیم.

یعنی بجای نوشتن def هنگام تعریف فانکشن از async def استفاده می‌کنیم.

با نوشتن کد زیر اولین فانکشن ایسینک یا coroutine خودمان را ایجاد کرده ایم :

async def aprint():
    print("this is an Async print !")

 

await

فانکشن های async را شبیه به فانکشن های عادی نمی‌توانیم اجرا کنیم.

برای اجرا کردن واقعی این فانکشن ها باید از کلمه کلیدی await قبل از اجرا کردن فانکشن استفاده کنیم.

پس برای اجرای فانکشنی یا coroutine ای که در بالا تعریف کردیم باید به شکل زیر بنویسیم:

await aprint()

 

اما اینجا با یک چالش جدید مواجه می‌شویم چرا که این کلمه کلیدی حتما باید داخل یک ایسینک فانکشن نوشته شده باشد.

پس برای اجرا کردن فانکشن aprint باید از یک فانکشن کمکی دیگر استفاده کنیم:

async def main():
    await aprint()

 

بازهم چالش !

تا اینجای کار کد زیر را داریم که سینتکس درستی دارد و صحیح نوشته شده است.

اما کار خاصی انجام نمی‌دهد.

async def aprint():
    print("this is an Async print !")

async def main():
    await aprint()

خب تا اینجا دو فانکشن ایسینک داریم که کار خاصی برای ما انجام نمی‌دهند چرا که فقط تعریف شده اند نه اجرا
طبق مطالبی که تا این مرحله از آموزش فرا گرفته ایم برای اجرا کردن فانکشن main هم نیاز به نوشتن ()await main داریم.

اما اگر بخواهیم این کار را هم انجام بدیم مجدد برای استفاده از await نیاز به یک فانکشن ایسینک دیگر داریم و این چرخه تا ابد ادامه خواهد داشت،

بدون آن که کدی اجرا شود!

 

asyncio

چاره کار این مشکل استفاده از کتابخانه asyncio که در کتابخانه های استاندارد و داخلی پایتون قرار دارد است.

کتابخانه ها و روش های متفاوتی برای اجرای این قطعه کد وجود دارد، ولی ما با استفاده از متد ()asyncio.run که

از نسخه 3.7 به بعد پایتون اضافه شده است می‌توانیم از کد بالا خروجی بگیریم و آن را اجرا کنیم.

کد نهایی و اولین کد ایسینک ما به این شکل خواهد بود.

import asyncio

async def aprint():
    print("this is an Async print !")

async def main():
    await aprint()

asyncio.run(main())