multiprocessing Temelleri
Birden çok CPU çekirdeği kullanın
multiprocessing Temelleri, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
Neden multiprocessing?
GIL, iş parçacıklarının Python bayt kodunu paralel çalıştırmasını engeller. multiprocessing modülü, her biri kendi yorumlayıcısına ve GIL'ine sahip ayrı süreçler başlatarak bu sınırlamayı aşar; böylece CPU'ya bağlı işler gerçekten birden çok çekirdekte çalışır.
import multiprocessing as mp
print('CPU cores available:', mp.cpu_count())Process Başlatma
Process(target=func), iş parçacığı API'sini yansıtır. Başlatmak için start(), beklemek için join() çağırın.
import multiprocessing as mp
def worker():
print('hello from a child process')
if __name__ == '__main__':
p = mp.Process(target=worker)
p.start()
p.join()
print('parent done')__main__ Koruması
Bazı platformlarda alt süreçler betiğinizi içe aktarır. if __name__ == '__main__': koruması olmadan süreçleri yinelemeli olarak başlatabilirsiniz. Başlatma kodunu her zaman bunun içine alın.
import multiprocessing as mp
def task(n):
print('processing', n)
if __name__ == '__main__':
for i in range(3):
p = mp.Process(target=task, args=(i,))
p.start()
p.join()Bağımsız Değişkenleri Geçirme
Konumsal bağımsız değişkenler için args, anahtar sözcük bağımsız değişkenleri için kwargs kullanın; iş parçacıklarında olduğu gibi. Bağımsız değişkenler serileştirilerek alt sürece gönderilir.
import multiprocessing as mp
def show(label, times):
for _ in range(times):
print(label)
if __name__ == '__main__':
p = mp.Process(target=show, args=('hi',), kwargs={'times': 2})
p.start()
p.join()İşçilerden Oluşan Bir Pool
multiprocessing.Pool, bir süreç grubunu yönetir. pool.map, bir yinelenebileni süreçler arasında böler ve sonuçları sırayla toplar.
import multiprocessing as mp
def square(n):
return n * n
if __name__ == '__main__':
with mp.Pool(processes=2) as pool:
print(pool.map(square, range(6)))ProcessPoolExecutor
concurrent.futures API'si, iş parçacıkları için gördüğünüz aynı submit/map arayüzüne sahip ProcessPoolExecutor seçeneğini de sunar.
from concurrent.futures import ProcessPoolExecutor
def cube(n):
return n ** 3
if __name__ == '__main__':
with ProcessPoolExecutor() as ex:
print(list(ex.map(cube, range(5))))Ayrı Bellek Alanları
Her sürecin kendi belleği vardır. Bir alt süreçteki genel değişkeni değiştirmek, üst sürecin kopyasını değiştirmez. Veriler açıkça döndürülmeli veya paylaşılmalıdır.
import multiprocessing as mp
counter = 0
def bump():
global counter
counter += 100
if __name__ == '__main__':
p = mp.Process(target=bump)
p.start()
p.join()
print('parent counter still:', counter)Sonuçları Geri Alma
Bellek paylaşılmadığından, genel değişkenleri değiştirmek yerine sonuçları Pool.map, yürütücüler veya kuyruklar aracılığıyla döndürün.
import multiprocessing as mp
def double(n):
return n * 2
if __name__ == '__main__':
with mp.Pool(2) as pool:
results = pool.map(double, [1, 2, 3, 4])
print('results:', results)Tek Çağrılar için apply_async
apply_async tek bir çağrıyı zamanlar ve bir sonuç tutamacı döndürür. Değeri almak için .get() çağrısını kullanın.
import multiprocessing as mp
def add(a, b):
return a + b
if __name__ == '__main__':
with mp.Pool(2) as pool:
r = pool.apply_async(add, (3, 4))
print(r.get())Serileştirme Gereksinimi
Hedefler ve bağımsız değişkenler, serileştirilebilir olmalıdır; böylece süreç sınırını aşabilirler. Üst düzey işlevler çalışır, ancak lambda ifadeleri ve yerel işlevler genellikle çalışmaz.
import multiprocessing as mp
def top_level(n):
return n + 1
if __name__ == '__main__':
with mp.Pool(2) as pool:
print(pool.map(top_level, [10, 20]))Süreçleri Ne Zaman Kullanmalı?
CPU'ya bağlı işler için süreçleri kullanın: matematik, görüntü işleme ve ayrıştırma. Süreç başlatma ve serileştirme ek yükü nedeniyle süreçler, çok sayıda küçük işten ziyade daha az sayıda ağır iş için uygundur.
import multiprocessing as mp
def heavy(n):
return sum(i * i for i in range(n))
if __name__ == '__main__':
with mp.Pool() as pool:
print(pool.map(heavy, [1000, 2000, 3000]))Kısa Kontrol
multiprocessing hakkındaki anlayışınızı sınayın.
Özet
multiprocessing temellerini öğrendiniz:
- Süreçler, gerçek CPU paralelliği için GIL'i aşar.
if __name__ == '__main__'korumasını kullanın.PoolveProcessPoolExecutor, işleri dağıtır ve sonuçları toplar.- Bellek paylaşılmaz; bağımsız değişkenler serileştirilebilir olmalıdır.
Sırada: kuyruklar ve kilitlerle verileri güvenli biçimde paylaşma.
Sıkça Sorulan Sorular
“multiprocessing Temelleri” dersi ücretsiz mi?
Evet — “multiprocessing Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“multiprocessing Temelleri” dersinde ne öğreneceğim?
Birden çok CPU çekirdeği kullanın Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“multiprocessing Temelleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İş Parçacıkları ve GIL
- ThreadPoolExecutor
- multiprocessing Temelleri
- Verileri Güvenle Paylaşma