Python'da eşzamanlılık: thread, process ve asyncio
Bekleyen işleri thread ve asyncio ile, ağır hesapları süreçlerle hızlandırır; yarış durumu ve kilitlenme gibi hataları bulup önlersin.
Seviye 301 · 19 ders · 18 pratik lab
Dersler
Kavramlar ve thread'ler
- Eşzamanlılık ve paralellik: GIL ne yapar?
- G/Ç'ye bağlı ve işlemciye bağlı iş
- threading ile iş parçacıkları
- Yarış durumu ve Lock
- queue ile üretici-tüketici
- Kilitlenme, Event ve Semaphore
- Kısa görev: dosyaları paralel indir ve doğrula
Süreçler
- multiprocessing ile süreçler
- Süreç havuzları ve veri paylaşımı
- concurrent.futures: tek arayüz, iki havuz
- Kısa görev: binlerce dosyanın özetini süreç havuzuyla çıkar
asyncio
- async ve await: olay döngüsü
- Görevler, gather ve TaskGroup
- Zaman aşımı ve iptal
- asyncio kuyrukları ve eşzamanlılık sınırı
- Olay döngüsünü kilitleyen kod ve to_thread
- Hangi model? Ölçerek karar vermek
- Kısa görev: yüz servisi aynı anda yokla
Bitirme
- Bitirme görevi: sınırlı, iptal edilebilir iş kuyruğu
Pratik lablar
- Küçük resim işlerini havuz boyutuyla sınırlamak: Her dosya için ayrı iş parçacığı açan betiği ThreadPoolExecutor ile aynı anda en çok dört iş çalışacak şekilde değiştir ve sınırı testle göster.
- Havuzdaki hataları kaybetmeden toplamak: Bazı işleri hata veren havuzda her future'ın sonucunu ya da istisnasını topla ve başarılı ile başarısız işlerin dökümünü döndür.
- Bekleyen işleri iş parçacıklarına bölmek: Sırayla çalışan ve her biri bir saniye bekleyen beş denetimi threading ile aynı anda çalıştır ve süreyi ölç.
- Bilet satışındaki yarış koşulunu kapatmak: Aynı koltuğu iki kez satan çok iş parçacıklı satış kodunu Lock ile düzelt ve yüklü testte fazla satış olmasın.
- Karşılıklı transferde kilitlenmeyi çözmek: İki hesap birbirine aynı anda para gönderince takılan kodu sabit kilit sırasıyla düzelt; test zaman aşımına düşmesin.
- Yazıcı havuzunu semaforla sınırlamak: Aynı anda en fazla üç baskı işinin çalışmasını Semaphore ile sağla ve sınırın aşılmadığını sayaçla kanıtla.
- Üretici-tüketici ile iş kuyruğu: queue.Queue ile bir üretici ve üç tüketiciden oluşan iş kuyruğu kur; tüm işler bitince tüketiciler temiz kapansın.
- Arka plan işçisini Event ile durdurmak: Sonsuz döngüde çalışan izleme iş parçacığını daemon bayrağına güvenmeden Event ile düzgünce durdur.
- Sınırlı kuyrukla belleği korumak: Hızlı üretici yüzünden belleği şişiren hattı sınırlı kuyrukla düzelt ve tepe bellek kullanımının sabit kaldığını göster.
- İşlemci yoğun hesabı süreç havuzuna vermek: Asal sayı sayımını ProcessPoolExecutor ile dört parçaya böl ve iş parçacıklı sürümle süre farkını ölç.
- Havuza gönderilemeyen işi düzeltmek: Lambda ve açık dosya nesnesi yüzünden pickle hatası veren havuz kodunu modül düzeyi fonksiyon ve yol argümanıyla düzelt.
- Sonuçları bittikçe toplamak: as_completed ile biten işleri sırayla raporla; bir işteki istisna diğerlerini durdurmasın ve ayrı listelensin.
- Süreçler arası sayacı doğru paylaşmak: Global değişkeni artırdığını sanan çok süreçli kodu Value ve Lock ile düzelt; sonuç her çalıştırmada doğru olsun.
- Sahte servisleri gather ile eşzamanlı sorgulamak: Üç sahte fiyat servisini await ile sırayla çağıran kodu gather ile eşzamanlı yap ve toplam süreyi düşür.
- Yavaş çağrıya zaman aşımı ve yedek yanıt: asyncio.timeout ile bir saniyeyi aşan çağrıyı iptal edip önbellekteki değeri dön; iptal edilen görev sızmasın.
- Eşzamanlı görev sayısını sınırlamak: Bin görevi aynı anda en fazla yirmi tanesi çalışacak şekilde asyncio.Semaphore ile sınırla ve tepe değeri testle doğrula.
- Olay döngüsünü tıkayan çağrıyı bulmak: Asenkron serviste time.sleep ve senkron dosya okuması yüzünden donan döngüyü bul, to_thread ile düzelt ve gecikmeyi ölç.
- TaskGroup ile hatada diğer görevleri iptal etmek: gather ile başlatılıp hata sonrası arkada çalışmaya devam eden görevleri TaskGroup'a taşı ve except* ile hataları topla.
Kurs hakkında
Bekleyen işleri thread ve asyncio ile, ağır hesapları süreçlerle hızlandırır; yarış durumu ve kilitlenme gibi hataları bulup önlersin.
Ne öğreneceksin
- Kavramlar ve thread'ler
- Süreçler
- asyncio
- Bitirme
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.