CodeBlanks Logo Icon CodeBlanks

Multiprocessing

multiprocessing.Pool ile paralel işleme yazarsın.

Paralel işleme katmanı

Bu derste multiprocessing.Pool ile paralel kare hesaplama ekleyeceksin. square fonksiyonu tanımlar, Pool.map ile bir listedeki tüm öğelere uygularsın.

Pool.map giriş sırasını korur; bu yüzden çıktı deterministiktir. Önceki derslerin Tool, Field ve ModelMeta kodu başlangıçta hazır. Sen yalnızca square fonksiyonunu ve Pool.map çağrısını eklersin. Bu katman, sonraki derste ctypes ile birleştirilecek.

Uygulama Pool ile paralel kare hesapla

Başlangıç kodunda Tool, Field ve ModelMeta hazır. Şimdi from multiprocessing import Pool ile içe aktar. square(x) fonksiyonu yaz; x * x döndürsün. with Pool() as p: bloğu içinde p.map(square, [1, 2, 3])'ü result'a ata. result'u yazdır.

Başlangıç kodu

main.py
# Tool sınıfını type() ile oluştur
Tool = type("Tool", (), {
    "name": "arac",
    "run": lambda self: f"{self.name} calisti",
})

# Field descriptor ve ModelMeta ekle
class Field:
    def __set_name__(self, owner, name):
        self.name = name
        if not hasattr(owner, "fields"):
            owner.fields = []
        owner.fields.append(name)

class ModelMeta(type):
    def __new__(mcs, name, bases, ns):
        return super().__new__(mcs, name, bases, ns)

class Model(metaclass=ModelMeta):
    ad = Field()

# Paralel kare hesaplama ekle
# square fonksiyonu ve Pool kullan
# sonucu yazdır

Örnek çözüm

main.py
# Tool sınıfını type() ile oluştur
Tool = type("Tool", (), {
    "name": "arac",
    "run": lambda self: f"{self.name} calisti",
})

# Field descriptor ve ModelMeta ekle
class Field:
    def __set_name__(self, owner, name):
        self.name = name
        if not hasattr(owner, "fields"):
            owner.fields = []
        owner.fields.append(name)

class ModelMeta(type):
    def __new__(mcs, name, bases, ns):
        return super().__new__(mcs, name, bases, ns)

class Model(metaclass=ModelMeta):
    ad = Field()

# Paralel kare hesaplama ekle
from multiprocessing import Pool

def square(x):
    return x * x

with Pool() as p:
    result = p.map(square, [1, 2, 3])
print(result)

Beklenen çıktı

[1, 4, 9]

Sıradaki adım: ctypes

Paralel kare hesaplama hazır. Sonraki derste yerel kod katmanı ekleyeceksin: ctypes.CDLL ile abs fonksiyonu çağırma yapacaksın.

Bu katman, C kütüphanesinden fonksiyon çağırma yeteneği katacak ve hızı artıracak. Şimdiye kadar Tool, Field, ModelMeta ve Pool katmanları hazır. Son ders tümünü birleştirerek çalışan bir uygulama kuracak.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Pool çağrısını tamamla

Soru
with ____() as p:
    result = p.map(square, [1, 2, 3])
Cevap
with Pool() as p:
    result = p.map(square, [1, 2, 3])

Açıklama: with Pool() as p bir süreç havuzu oluşturur.

2 Multiprocessing kavramlarını eşleştir

Kavram Anlamı
Pool Süreç havuzu
square Kare fonksiyonu
map Paralel uygular
result Sonuç listesi

3 Pool.map ne sağlar?

  • Rastgele sıralı sonuç
  • Giriş sırasını koruyan paralel sonuç Doğru cevap
  • Tek bir değer
  • Bir hata

Açıklama: Pool.map paralel çalışır ama giriş sırasını korur; çıktı deterministiktir.

Uzman bölümündeki tüm dersler