Multiprocessing
- Python kursu
- Uzman
- Ders 45/47
- 6 dk
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
# 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
# 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
with ____() as p:
result = p.map(square, [1, 2, 3])
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.