Sie finden den gesamten Quelltext des Artikels in der Datei async.py
.
Jeder tag in diesem Repo ist eine Momentaufnahme zu dem der Code funktionsfähig ist:
- Listing 1-2: Ein einfacher, synchroner Countdown
- Listing 3-4: Countdown mit einem einfachen Scheduler
- Listing 5: Wait Smarter, Not Harder
- Listing 6-8: Scheduler mit Generatoren
- Listing 9-12: Ausführung von Befehlen im Scheduler
- Listing 13-15: Asynchrone Queues
Hier können Sie beliebige Tags miteinander vergleichen.
Zum Vergleich mit der letzten Version von async.py
, hier eine alternative Implementierung mit Python's built-in asyncio
module und den async
und await
keywords:
import asyncio
async def producer(n: int, queue: asyncio.Queue):
while n >= 0:
queue.put_nowait(n)
await asyncio.sleep(1)
n -= 1
async def consumer(name: str, queue: asyncio.Queue):
while True:
result = await queue.get()
print(name, result)
if result == 0:
return
async def main():
bobs_queue = asyncio.Queue()
alices_queue = asyncio.Queue()
await asyncio.gather(
asyncio.create_task(producer(3, bobs_queue)),
asyncio.create_task(consumer("Alice", alices_queue)),
asyncio.create_task(consumer("Bob", bobs_queue)),
asyncio.create_task(producer(3, alices_queue)),
)
asyncio.run(main())