Python’da Çoklu İşlem Oluşturma (Multi Process)

Bir önceki yazımda Thread ve Process kavramlarını açıklamıştım. Çoklu Thread ve Process ihtiyacından bahsedip Thread üzerine kısa bir örnek yapmıştım, şimdi de Process sayısını nasıl arttırabiliriz bunun üzerine bir şeyler söyleyeyim.

Yeni Process’ler oluşturmak için yine Thread benzeri bir Python modülümüz var. multiprocessing isimli bu modül içinde Process sınıfı ile işlemlerimizi yapacağız.

Pool Sınıfı: Havuz anlamındaki bu sınıf bize bir Process havuzu oluşturmamızı ve verdiğimiz işlemleri bu havuz içindeki process‘ler ile yapmamızı sağlar. Yönetimi onu oluşturan process’e aittir. Pool sınıfına ait metotların gösterildiği dokümantasyondaki küçük örneğe bakalım;

İşaretlediğim yerleri açıklamaya çalışayım.

1: bir process’te asenkron olarak fonksiyonumuzu çalıştırıyoruz
2: bir önceki işlemin sonucu getiriyoruz. Burada çok yavaş bir işlemciniz var ise sonuç henüz hazır olmayacağı için dönüş olmayabilir.
3: senkron bir biçimde 1den 10a kadar olan sayıların karesi konsola basılacaktır
4: “3”teki işlemin Generator bir fonksiyon dönen daha tembel hali ama büyük işlemlerde performanslı hali.

Metotlardaki timeout parametresi verilen sürede işlemin yapılmasını söyler yoksa “multiprocessing.TimeoutError” hatası verecektir.

Process sınıfını tek başına kullanımı ise Thread sınıfına benzer şekildedir. Yine dokümantasyon içindeki örneği açıklayayım.

Yine bir target parametresine fonksiyon adımızı vererek process’imizi başlattık. Oluşturduğumuz info fonksiyonu ve os modülü ile info fonksiyonunun çağrıldığı process hakkında bilgileri konsola bastık. Burada ilk process’in id’si ikinci process’in “parent id”si olmasına dikkat edelim.

Process’ler Arası İletişim

İki yol ile mümkün. Pipe ve Queue sınıfları. Queue için şu örneğe bakalım;

Kod açık yeterince. Bir Queue nesnesi oluşturulup child process içinde atanan değere parent process içinde erişilebiliyor.

Pipe ise bize iki nesne döndürüyor ve bunları child ve parent process’lerde kullanmamızı istiyor.

Daha çok çeviri gibi bir yazı oldu, standartlar belli az çok zaten yorum katılacak tek yer kod örnekleri olabilirdi herhalde. Kaynağı da buraya yazarak bitiriyorum https://docs.python.org/3.6/library/multiprocessing.html

Bir Cevap Yazın