await asyncio.sleep
- Python kursu
- İleri seviye
- Ders 28/83
- 5 dk
await asyncio.sleep ile bekleme öğrenirsin.
await asyncio.sleep
asyncio.sleep, eşzamanlı kodda time.sleep'in karşılığıdır. Olay döngüsünü bloklamadan belirli bir süre bekler; bu süre boyunca diğer coroutine'ler çalışabilir.
async def task():
print("start")
await asyncio.sleep(0)
print("end")Burada await asyncio.sleep(0) olay döngüsüne başka coroutine'lere geçiş izni verir. Süre sıfır olsa bile bu denetim noktası geçerlidir.
time.sleep ise tüm programı döndürür; bu yüzden async kodda kullanılmaz.
Bekleme ve denetim noktası
Bir coroutine await noktasına gelince denetimi olay döngüsüne verir. Döngü, bekleyen başka bir coroutine'e geçer. Bu, eşzamanlı görünümün temelidir.
Bekleme süreleri saniye cinsindendir; küsuratlı olabilir. await asyncio.sleep(0.5) yarım saniye bekler. Süre sıfır olsa bile denetim geçer.
Bu model, GIL kısıtı altında bile yüksek eşzamanlılık sağlar: I/O beklerken başka işler yapılır.
Uygulama await asyncio.sleep ile task yaz
import asyncio ile başla. async def task() fonksiyonu önce print("start") yapsın, sonra await asyncio.sleep(0) eklesin, en son print("end") yapsın ve return "ok" döndürsün. print(asyncio.run(task())) çağrısını ekle.
Başlangıç kodu
# asyncio modülünü içe aktar
# task adında bir coroutine tanımla; önce "start" yazdır, sıfır saniye bekle, "end" yazdır, "ok" döndür
# task çağrısının sonucunu asyncio.run ile yazdırÖrnek çözüm
import asyncio
async def task():
print("start")
await asyncio.sleep(0)
print("end")
return "ok"
print(asyncio.run(task()))Beklenen çıktı
start end ok
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 async kodda time.sleep neden kullanılmaz?
- Daha yavaş olduğu için
- Hata fırlattığı için
- Olay döngüsünü blokladığı için Doğru cevap
- Yalnızca Windows'ta çalıştığı için
Açıklama: time.sleep tüm programı döndürür; diğer coroutine'ler çalışamaz.
2 asyncio.sleep çağrısı
import asyncio
async def task():
await ____(0)
import asyncio
async def task():
await asyncio.sleep(0)
Açıklama: asyncio.sleep(0) olay döngüsüne geçiş izni verir.
3 sleep kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
asyncio.sleep |
Bloklemeyen bekleme |
time.sleep |
Bloklar |
await asyncio.sleep(0) |
Denetim noktası |
await asyncio.sleep(0.5) |
Yarım saniye |