Çoğu programlama dillerinde olduğu gibi Python dilinde de paralel işlemler yapılabilmektedir. Birçok kaynakta threading olarak da adlandrılmaktadır. Bu yazımda “multiprocessing” kütüphanesi kullanılarak Python’da nasıl paralel işlem yapılabileceğini basit bir örnekle anlatacağım. Örneğimizde 5 adet fonksiyon tanımlayacağız ve beşine de start komutu göndererek fonksiyonların içindeki rakamları yazdıracağız. Normalde fonksiyonlar belirli bir sırayı takip etmektedir. Bir fonksiyon bitmeden diğer fonksiyon işlem yapamaz. Fakat multiprocessing işleminde, işlemler cpu’lara bölüştürülür ve aynı anda işlemler yapılır.
Python kodumuz şu şekilde:
#!/usr/bin/env python
# encoding: utf-8
import multiprocessing
def ornek_kod1():
name = multiprocessing.current_process().name
print name, ‘ 1’
def ornek_kod2():
name = multiprocessing.current_process().name
print name, ‘ 2’
def ornek_kod3():
name = multiprocessing.current_process().name
print name, ‘ 3’
def ornek_kod4():
name = multiprocessing.current_process().name
print name, ‘ 4’
def ornek_kod5():
name = multiprocessing.current_process().name
print name, ‘ 5’
if __name__ == '__main__':
birinci = multiprocessing.Process(target=ornek_kod1)
ikinci = multiprocessing.Process(target=ornek_kod2)
ucuncu = multiprocessing.Process(target=ornek_kod3)
dorduncu = multiprocessing.Process(target=ornek_kod4)
besinci = multiprocessing.Process(target=ornek_kod5)
birinci.start()
ikinci.start()
ucuncu.start()
dorduncu.start()
besinci.start()
Yukarıdaki örnek kodda “ornek_kod1, ornk_kod2, …” isimlerinde fonksiyonlar oluşturduk ve her birinden mevcut processin (işlemin) ismini ve fonksiyon adında bulunan rakamı yazdırmasını istedik. Bunun için birinci, ikinci, … isimlerinde processlerimizi tanımladık, daha sonrasında start() komutu ile threadlerin çalışmasını sağladık. Yukarıdaki python kodunun çıktısı şu şekilde oldu:
Yukarıdaki ekran görüntüsü dikkatle incelendiğinde işlemlerin belirli bir sırayla bitmediği görülmektedir. Normalde multiprocessing yapmasaydık 1
, 2, 3, 4, 5 sırasıyla çıktı üretilecekti. Yukarıda ise 3, 2, 5, 4, 1 sırasıyla çıktı üretildiğini görüyoruz. Bunun sebebi de cpuların farklı zamanlarda işlemini bitirmesi ve işlemi önce bitenin ekrana çıktıyı yazmasından kaynaklanmaktadır. Bu yüzden bu programı her çalıştırdığımızda farklı sonuçlar görebiliriz.
BEN iki fonksiyon tanımlayıp bu fonksiyonları sürekli paralel olarak çalıştırmak istiyorum http://bolubeyi.net/python-ile-multiprocessing-islemi.html adresindeki yöntemi uyguladım ama python kendini kapatıyor sürekli python 3.4.2 kullanıyorum.Kodum yaklaşık şöyle
def paralelislem1_fonksiyonu():
while True:
fonksiyonA()
fonksiyonB()
fonksiyonC()
def paralelislem2_fonksiyonu():
while True:
fonksiyonD()
if __name__ == ‘__main__’:
birinciparalelislem=multiprocessing.Process(name=’ilk fonksiyon’,target=paralelislem1_fonksiyonu)
ikinciparalelislem=multiprocessing.Process(name=’ikinci fonksiyon’,target=paralelislem2_fonksiyonu)
birinciparalelislem.start()
ikinciparalelislem.start()
nerede hata yaptığımı bulamadım yardımcı olabilirseniz sevinirim iyi çalışmalar kolay gelsin.
Yazdığınız kodu denedim, hata yok aslında. Yalnız Too much output diye uyarı veriyor. Sebebi de programın sonlanmayıp sonsuza kadar çaılşması gibi duruyor. Böyle olunca da cpu’yu yoruyor ve python kapatıyor kendisini diye düşünüyorum.
alttaki gibi bir hata alıyorum sebebi nedir hocam?
File “main.py”, line 6
name = multiprocessing.current_process().name
Hatanın başka bir açıklaması yok mu? multiprocessing kütüphanesini kontrol edebilirsiniz, güncel olmayabilir