Sobes.tech
Middle

Какво е асинхронно програмиране (async)?

sobes.tech AI

Отговор от AI

Асинхронното програмиране е парадигма, която позволява изпълнението на множество задачи едновременно, без да блокира основния поток на изпълнение на програмата. Това се постига чрез ефективно използване на времето за изчакване (например при операции за въвеждане/извеждане).

Основни концепции:

  • Корутините: Специални функции, които могат да спират изпълнението си и да го възобновяват по-късно. Обявяват се с async def.
  • Цикъл на събитията: Основният оркестратор, който управлява изпълнението на корутините, следи събитията и превключва между задачите, когато една от тях чака.
  • await: Ключова дума за спиране на изпълнението на коруин до завършване на очакваната операция (например, извикване на друга коруина или изчакване на резултат от I/O).

Пример:

// Пример за асинхронна функция
import asyncio

async def fetch_url(url):
    print(f"Започвам зареждане: {url}")
    await asyncio.sleep(2) // Имитация на дълга операция (например, мрежов заявка)
    print(f"Зареждането завърши: {url}")

async def main():
    # Създаваме задачи от коруини
    task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
    task2 = asyncio.create_task(fetch_url("http://example.com/page2"))

    # Изчакваме и двете задачи да приключат
    await task1
    await task2

// Стартираме цикъла на събитията
if __name__ == "__main__":
    asyncio.run(main())

Предимства:

  • Подобряване на производителността: Особено за задачи, свързани с I/O (мрежови заявки, работа с файлове).
  • По-добро използване на ресурсите: Не се създават множество нишки или процеси, което намалява разходите.
  • Запазване на отзивчивост: Основният поток не се блокира, което е важно за интерактивни приложения или сървъри.

Асинхронното програмиране е подходящо за:

  • Уеб сървъри (например, с използване на asyncio или FastAPI).
  • Парсване на уебсайтове.
  • Работа с бази данни.
  • Всяка задача, свързана с изчакване на външни ресурси.