Ugrás a fő tartalomra
Közepes Python2026-07-29 · 11 perc olvasás

Python async / await Magyarázat: A 2026-os oktatóanyag

Az Async a Pythonban zavaró hírnévvel bír. Nem kell, hogy az legyen. Miután beépített egy mondatot – az async lehetővé teszi, hogy EGY szál több I/O-hoz kötött feladatot egymásba rendezve futtasson – minden más következik.

Ez az oktatóanyag bemutatja: mit csinál valójában az "async def" és a "wait", amikor az aszinkron nyer, illetve amikor nem a megfelelő eszköz, a négy mintát, amelyet minden aszinkron kódbázis használ (szekvenciális, összegyűjtés, szemafor, időtúllépés), valamint a három mód, ahogy a kezdők csendben lenyelhetik a hibákat.

Az egymondatos mentális modell

Az Async a Pythonban együttműködő párhuzamosság egyetlen szálban. Amikor a kód eléri a "várni" értéket, a vezérlés visszatér az eseményhurokhoz, amely egy másik feladatot futtathat, miközben az első I/O-ra vár. Amikor az I/O befejeződik, a hurok onnan folytatja az első feladatot, ahol szünetelt.

Ennyi. Nincsenek szálak, nincsenek folyamatok, nincs párhuzamosság (a CPython-with-GIL értelmében). Csak egy szál sok olyan feladattal zsonglőrködik, amelyek idejük nagy részét a hálózaton / lemezen / adatbázison töltik.

Az aszinkron gyorsabb, ha a szűk keresztmetszet vár, nem a számítástechnika.

A háromsoros minimálisan életképes aszinkron program

▶ PYTHONeditable · runs in your browser
  • async def hello() — deklarál egy korutint. A hello() meghívása nem futtatja le a kódot; korutin objektumot hoz létre.
  • wait asyncio.sleep(1) — 1 másodpercre visszaadja a vezérlést az eseményhuroknak.
  • `asyncio.run(hello()) — eseményhurkot hoz létre, és a korutint a befejezésig lefuttatja.

Szabály: `várni` csak az `async def`-on belül. A várakozás meghívása egy normál függvényben SyntaxError.

Amikor az aszinkron nyer (és amikor nem)

Az Async nyer: I/O-kötött munka

Minden olyan feladat, amely a falióra idejének nagy részét VÁRAKOZÁSSAL tölti, aszinkronizálható:

  • HTTP kérések (külső API-k, scraping, webhookok)
  • Adatbázis lekérdezések
  • Fájl olvas/ír
  • WebSocket / gRPC adatfolyamok
  • Várólista fogyasztók (Redis, RabbitMQ, Kafka)

Példa: 100 URL lekérése.

▶ PYTHONeditable · runs in your browser

50-100-szoros falióra-gyorsítás nehéz I/O-s munkákhoz. Ez az a hely, ahol az aszinkron kiérdemli az összetett költségvetését.

Az async ELVESZTÉSE: CPU-hoz kötött munka

Az Async nem ad párhuzamosságot a számításokhoz. Mivel kooperatív egyszálú, a CPU-hot loop blokkolja a teljes eseményhurkot.

▶ PYTHONeditable · runs in your browser

A pbkdf2 futása közben minden más feladat kihal. A CPU-hoz kötött munkához a multiprocessing vagy a concurrent.futures.ProcessPoolExecutor kifejezést használja, ne az async-et.

Vegyes munkaterhelés: run_in_executor

Ha EGY lépés CPU-nehéz, a többi pedig I/O, csomagolja be a CPU lépést úgy, hogy egy szálkészletben fusson a hurok blokkolása nélkül:

▶ PYTHONeditable · runs in your browser

A "Nincs" = alapértelmezett szálkészlet. Kiválóan alkalmas harmadik féltől származó szinkronizálási könyvtárak hívására, amelyek lassúak, de nem írhatók át.

A négy minta

1. Szekvenciális – egyszerre egy feladat

▶ PYTHONeditable · runs in your browser

Akkor használja, ha minden kérés az előző eredményétől függ.

2. asyncio.gather — egyszerre tüzel

▶ PYTHONeditable · runs in your browser

Független I/O feladatok alapértelmezett választása. De: ha 10 000 feladatot gyűjt össze egy API-val, akkor sebességkorlátozott vagy kimerítő fájlleírókat kap. Itt jön be a szemafor minta.

3. Szemafor — sapka párhuzamosság

▶ PYTHONeditable · runs in your browser

Az asyncio.Semaphore(N) legfeljebb N feladatot enged át bármikor az async with sem:-en. A többi feladatsor. Használja bármilyen sebességkorlátozással rendelkező külső API-hoz vagy kapcsolatkészlettel rendelkező adatbázishoz.

4. Időtúllépés – hagyja abba a lassú munkát

▶ PYTHONeditable · runs in your browser

Az asyncio.wait_for N másodperc után megszakítja a mögöttes feladatot. Nélkülözhetetlen minden olyan aszinkron kódhoz, amely hálózattal kommunikál – soha ne hagyjon korlátlan várakozást.

A három hibanyelő csapda

1. csapda: asyncio.gather a return_exceptions=True paraméterrel

▶ PYTHONeditable · runs in your browser

Hasznos, ha meg szeretné tartani a részeredményeket, de halálos, ha nem ellenőriz minden eredményt:

▶ PYTHONeditable · runs in your browser

Az ellenőrzés nélkül a hibák csendben eltűnnek.

2. csapda: Tüzeld el és felejtsd el a feladatokat

▶ PYTHONeditable · runs in your browser

Ha a background_work() megemelkedik, a Python figyelmeztetést ad ki leállításkor, és továbblép. Ha bármit érdekel, tárolja a feladatot, és "várja meg", vagy használja az "asyncio.TaskGroup" (3.11+) programot, amely minden hibát továbbít.

3. csapda: Szinkronizálja a kódot az aszinkron belül

▶ PYTHONeditable · runs in your browser

a kérések szinkron. Még egy "async def"-en belül is a "requests.get" blokkolja a teljes ciklust, amíg a válasz meg nem érkezik. Használja a "httpx" (vagy "aiohttp") protokollt az aszinkron HTTP-hez.

Szabály: soha ne használjon szinkron I/O-könyvtárat az aszinkron kódon belül. Ha a könyvtárnak nincs aszinkron változata, csomagolja be a "run_in_executor" karakterláncba.

asyncio.TaskGroup – a 2026-os kibontakozás módja

A Python 3.11 hozzáadta a "TaskGroup"-ot, amely tisztán javítja a tűz és felejts problémát:

▶ PYTHONeditable · runs in your browser

Strukturált párhuzamosság – nincsenek elveszett hibák, nincsenek árva feladatok. Inkább ezt a puszta "create_task" helyett a modern kódban.

Valós példa: sebességkorlátozott kaparó

▶ PYTHONeditable · runs in your browser

Mind a négy minta 15 sorban: korlátos egyidejűség (szemafor), időtúllépések (wait_for), explicit hibaelágazások (nincs lenyelés) és összegyűjtés a kifutóhoz. Másolja és illessze be ezt az alakzatot bármely aszinkron I/O feladatba.


A Python Async-nek valódi tanulási görbéje van, de a mentális modell egyszerű: egy szál, a kooperatív szünetek „várakoznak”, az I/O átfedésben van. Master Gather + Semaphore + wait_for + TaskGroup, és az aszinkron munka 95%-át lefedi, amit valaha is fog írni.

Következő lépés: a Senior Python track 20 gyakorlati leckét tartalmaz az asyncioról, a TaskGroupról, az aiohttp/httpx-ről és a fenti párhuzamossági mintákról – valódi Python futtatásával a böngészőben.

Készen áll a kipróbálására?

Ingyenes 15 óra ingyenes regisztráció után – kártya nélkül. Kísérje ki a platformot, majd döntse el.

Kezdje ingyen →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.