CodeBlanks Logo Icon CodeBlanks

await asyncio.sleep

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

main.py
# 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

main.py
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ı

Soru
import asyncio

async def task():
    await ____(0)
Cevap
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

İleri seviye bölümündeki tüm dersler