برنامه نویسی

کد ناهمزمان چیست؟ نحوه استفاده از آن در پایتون برای افزایش سرعت یادگیری کد خود با ساخت یک برنامه آب و هوا! ☀️🌦️

سلام، حرفه ای پایتون آینده! 👋 بنابراین، احتمالاً اصطلاح «ناهمزمان» را شنیده‌اید که توسط توسعه‌دهندگان مطرح می‌شود، انگار که نوعی طلسم جادویی است. امروز، ما قصد داریم اسرار کد ناهمزمان در پایتون، چرایی عالی بودن آن و نحوه استفاده از آن برای سرعت بخشیدن به کد خود را کشف کنیم. و حدس بزنید چی؟ در پایان، شما یک برنامه آب و هوای کوچک و زیبا ساخته اید که داده ها را برای چندین شهر به طور همزمان درخواست می کند. بیایید به آن برسیم!

کد همزمان در مقابل کد ناهمزمان

قبل از غواصی، اجازه دهید در مورد کد همزمان و ناهمزمان صحبت کنیم. این دو نوع کد مانند لاک پشت و خرگوش 🐢🐇 دنیای برنامه نویسی هستند.

کد سنکرون

کد سنکرون خط به خط اجرا می شود. بنابراین، اگر داده‌های آب‌وهوای پاریس و لندن را دریافت می‌کنید، کد شما ابتدا داده‌های پاریس را دریافت می‌کند، سپس صبر کن تا زمانی که این کار قبل از حرکت به داده های لندن انجام شود. این باعث می‌شود کد شما برای خواندن ساده باشد، اما کند است، زیرا منتظر می‌ماند تا زمانی که هر درخواست تمام می‌شود، کاری انجام ندهد. ایده آل نیست!



def get_weather_sync(city):
    # Imagine this function fetches weather data for a city
    print(f"Getting weather data for {city}...")
    # Pretend we wait here for the data
    time.sleep(2)
    print(f"Got data for {city}!")

get_weather_sync("Paris")
get_weather_sync("London")


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

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

در اینجا، هر شهر 2 ثانیه طول می کشد، بنابراین گرفتن هر دو در مجموع 4 ثانیه زمان می برد. 🥱

کد ناهمزمان

کد ناهمزمان منتظر نمی ماند! اگر آب و هوا برای پاریس خوب باشد، می تواند همچنین در همان زمان شروع به گرفتن آب و هوا برای لندن کنید. مثل داشتن دو بازو می ماند: می توانید به جای یک بازو، دو چیز را همزمان بگیرید. اینجاست که پایتون asyncio کتابخانه وارد می شود و به شما امکان می دهد وظایف را همزمان انجام دهید.

در اینجا یک مثال ساده از کد ناهمزمان آورده شده است:



import asyncio

async def get_weather_async(city):
    print(f"Getting weather data for {city}...")
    await asyncio.sleep(2)
    print(f"Got data for {city}!")

async def main():
    await asyncio.gather(
        get_weather_async("Paris"),
        get_weather_async("London")
    )

asyncio.run(main())


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

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

حالا هر دو کار به جای 4 ثانیه در 2 ثانیه انجام می شود. سریع!

چرا از کد ناهمزمان استفاده کنیم؟

کد ناهمزمان زمانی که با آن سروکار دارید می درخشد وظایف I/O-Bound. این وظایف زمان زیادی را صرف انتظار می کنند، مانند واکشی داده ها از طریق اینترنت. با کد ناهمزمان، برنامه شما می تواند در حین انتظار اقدامات دیگری را انجام دهد و آن را سریعتر و کارآمدتر کند.

ملاقات کنید asyncio: یار ناهمزمان شما

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

  • async def: یک تابع ناهمزمان را تعریف می کند.
  • await: عملکرد را متوقف می کند تا زمانی که کار مورد انتظار انجام شود.
  • asyncio.gather(): چندین عملکرد غیر همگام را به طور همزمان اجرا می کند.

بیایید یک برنامه آب و هوا بسازیم! 🌎⛅

تئوری بس است – بیایید دستمان را کثیف کنیم! ما قصد داریم یک برنامه ساده آب و هوا بسازیم که داده های چند شهر را به طور همزمان دریافت می کند.

مرحله 1: راه اندازی

ابتدا باید آن را نصب کنید aiohttp کتابخانه، که به ایجاد درخواست های HTTP ناهمگام کمک می کند. ترمینال خود را باز کنید و اجرا کنید:



pip install aiohttp


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

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

مرحله 2: واکنده هوای ناهمزمان را بنویسید

ما از یک API رایگان آب و هوا، wttr.in استفاده خواهیم کرد، که اطلاعات آب و هوا را فقط با تماس با URL به ما می دهد.



import asyncio
import aiohttp

async def fetch_weather(session, city):
    url = f"http://wttr.in/{city}?format=3"
    async with session.get(url) as response:
        data = await response.text()
        print(f"Weather in {city}: {data}")


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

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

در اینجا چیزی است که اتفاق می افتد:

  • ما استفاده می کنیم aiohttp.ClientSession() برای ایجاد یک جلسه برای درخواست های ما.
  • را await response.text() خط عملکرد ما را متوقف می کند تا زمانی که داده ها برگردند.

مرحله 3: توابع Async را با هم اجرا کنید

اکنون، اجازه دهید تابع اصلی را اضافه کنیم که داده های آب و هوا را برای چندین شهر به طور همزمان دریافت می کند.



async def main():
    cities = ["Paris", "London", "New York", "Tokyo", "Sydney"]

    async with aiohttp.ClientSession() as session:
        tasks = [fetch_weather(session, city) for city in cities]
        await asyncio.gather(*tasks)

# Start the async event loop
asyncio.run(main())


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

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

در main تابع:

  • ما لیستی از وظایف را برای هر شهر ایجاد می کنیم.
  • asyncio.gather(*tasks) همه آنها را به یکباره اجرا می کند، بنابراین برنامه هواشناسی ما داده ها را بسیار سریع دریافت می کند!

مرحله 4: برنامه خود را اجرا کنید

کد خود را ذخیره کنید و سپس آن را اجرا کنید! شما باید آب و هوای همه شهرها را در حدود 2 ثانیه چاپ کنید. در اینجا کد کامل برای راحتی شما آمده است:



import asyncio
import aiohttp

async def fetch_weather(session, city):
url = f"http://wttr.in/{city}?format=3"
async with session.get(url) as response:
data = await response.text()
print(f"Weather in {city}: {data}")

async def main():
cities = ["Paris", "London", "New York", "Tokyo", "Sydney"]
async with aiohttp.ClientSession() as session:
tasks = [fetch_weather(session, city) for city in cities]
await asyncio.gather(*tasks)

asyncio.run(main())

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

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

در حال اتمام 🎉

و شما آن را دارید! شما به تازگی با استفاده از کد ناهمزمان در پایتون یک برنامه آب و هوای فوق شارژ ساخته اید. اکنون، می‌توانید مانند یک حرفه‌ای، بدون کاهش سرعت برنامه، داده‌ها را از چندین منبع واکشی کنید!

با یادگیری نحوه استفاده asyncio، شما قدرت کدهای سریعتر و کارآمدتر را باز کرده اید. بنابراین، ادامه دهید – API های بیشتری را کاوش کنید، داده های بیشتری را مدیریت کنید و چیزهای جالبی بسازید. دنیای async متعلق به شماست! 🚀

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

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

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

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