async i await

Programowanie asynchroniczne: czekanie na operacje bez blokowania całego programu.

Na tej stronie

Przykład

#
Python
import asyncio

async def load(name, delay):
    await asyncio.sleep(delay)
    return f"{name} gotowe"

async def main():
    results = await asyncio.gather(
        load("kursy", 0.2),
        load("profil", 0.1)
    )
    print(results)

asyncio.run(main())
Wynikzapisany wynik, możesz go sprawdzić
['kursy gotowe', 'profil gotowe']

Definicja i zastosowanie

#

Funkcja zdefiniowana przez async def to korutyna. Wewnątrz niej await wstrzymuje jej działanie do czasu zakończenia innej operacji asynchronicznej, pozwalając w międzyczasie wykonywać inne zadania.

Korutyny uruchamia pętla zdarzeń, najprościej przez asyncio.run(main()). Funkcja asyncio.gather() uruchamia kilka korutyn jednocześnie i czeka na wszystkie, co przyspiesza na przykład wiele zapytań sieciowych.

Asynchroniczność pomaga przy operacjach, które głównie czekają: zapytaniach HTTP, bazie danych, plikach. Nie przyspieszy obliczeń obciążających procesor.

Składnia

#
Składnia
async def funkcja():
    wynik = await inna_korutyna()

Dobre praktyki

#
  • asyncio.gather() zwraca wyniki w kolejności przekazanych korutyn, nie w kolejności zakończenia.
  • Nie wywołuj blokujących funkcji (np. time.sleep) w korutynach. Używaj ich asynchronicznych odpowiedników.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.