0Pricing
Python Academy · Ders

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.
  • Pool ve ProcessPoolExecutor, 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

  1. İş Parçacıkları ve GIL
  2. ThreadPoolExecutor
  3. multiprocessing Temelleri
  4. Verileri Güvenle Paylaşma
← Python Academy Sayfasına Dön