Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Skapa och Köra Koroutiner | Asynchronous Programming
Python Strukturell Programmering

Skapa och Köra Koroutiner

Svep för att visa menyn

För att börja arbeta med asynkron programmering i Python behöver du förstå koroutiner. En korutin är en speciell funktion som definieras med async def. Koroutiner gör det möjligt att pausa och återuppta exekveringen, vilket gör det möjligt att hantera uppgifter som att vänta på in-/utdataoperationer – såsom filavläsning, nätverksförfrågningar eller databasfrågor – utan att blockera hela programmet. Detta innebär att medan en uppgift väntar på data kan andra uppgifter fortsätta köra, vilket förbättrar effektivitet och responsivitet.

För att köra en korutin använder du asyncio.run, som startar en händelseloop, kör din korutin och stänger loopen när den är klar. Detta är det standardiserade sättet att starta asynkron kod i modern Python.

Om du vill köra mer än en korutin samtidigt kan du använda asyncio.gather för att schemalägga dem parallellt. Detta gör att ditt program kan starta flera uppgifter och vänta på att alla ska bli klara, vilket utnyttjar tiden bättre, särskilt vid långsamma operationer som I/O.

Följande kod demonstrerar dessa koncept.

import asyncio

async def greet(name, delay):
    await asyncio.sleep(delay)
    print(f"Hello, {name}!")

async def main():
    # Schedule two coroutines to run concurrently
    await asyncio.gather(
        greet("Alice", 2),
        greet("Bob", 1)
    )

asyncio.run(main())

Förväntat resultat:

Hello, Bob!
Hello, Alice!

Bobs hälsning visas först eftersom den använder en kortare fördröjning (1 sekund) än Alices (2 sekunder).

Korutinen greet skapas med async def, vilket gör det möjligt att pausa exekveringen med await asyncio.sleep(delay) innan en hälsning skrivs ut. Korutinen main schemalägger två instanser av greet – en för "Alice" med 2 sekunders fördröjning och en för "Bob" med 1 sekunds fördröjning – med hjälp av asyncio.gather. Detta innebär att båda hälsningarna hanteras samtidigt, så programmet väntar inte på att den ena ska bli klar innan den andra startar. Slutligen startar asyncio.run(main()) händelseloopen, kör korutinen main och ser till att allt städas upp efteråt. Detta tillvägagångssätt gör det möjligt att hantera flera uppgifter som innebär väntetid (som nätverksförfrågningar eller tidsfördröjningar) samtidigt, vilket gör programmet mer effektivt och responsivt.

question mark

Vilket påstående beskriver bäst hur asyncio.gather schemalägger korutiner?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 4. Kapitel 2
some-alt