Fonksiyonları aynı anda çalıştırmak için pythonda iki modülden de faydalanabiliriz. Multiprocessing ve Threading birbirinden farklı iki yapı fakat ikisiyle de bu işlem yapılabilir.
Multiprocessing : Çalıştırılan fonksiyonları CPU üzerinde farklı proseslerle çalıştırır, her fonksiyonun ram CPU kullanımı birbirinden bağımsızdır. Bu modul aynı zamanda cihaz üzerinde CPU çekirdeklerinin her birine bir işlem atamak için de kullanılır. Böylece CPU'nun tüm çekirdekleri efektif olarak kullanılır ve hızlı bir şekilde işlemler yapılabilir.
Threading : Aynı proses içinde fonksiyonları çalıştırır, burada bir sıra söz konusudur. Aynı anda CPU üzerinde sadece bir işlem yapabilir dolayısıyla işleri sıraya koyarak yapar. Kullanımı basittir, belirli peryotlarda çalıştırılacak işler için idealdir.
Daha anlaşılır şekilde şöyle anlatabiliriz; Elinizde bir takım işler var markete gideceksiniz, aracınızı yıkamalısınız, yemek yapmalısınız. Multiprocessing çalıştığında bu işlerin herbirini farklı bir kişi yapar, Threading kullanıyorsanız tüm bu işleri aynı kişi yapar.
---
from threading import Thread
def func1():
print('Working')
def func2():
print("Working")
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
---
Aşağıdaki kodu da kullanabilirsiniz.
---
from threading import Thread
def func1():
def func2():
t1 = Thread(target=func1)
threads = [t1]
t2 = Thread(target=func2)
threads += [t2]
t1.start()
t2.start()
for tloop in threads:
tloop.join()
---
Bir diğer örnekte aşağıdaki gibi olabilir.
import threading
data_1=[1,2]
data_2=[2,3]
data_3=[3,4]
def fonksiyon(Data):
print(Data)
# Thread oluştur
t1 = threading.Thread(target=fonksiyon, args=(data_1,))
t2 = threading.Thread(target=fonksiyon, args=(data_2,))
t3 = threading.Thread(target=fonksiyon, args=(data_3,))
# Başlat
t1.start()
t2.start()
t3.start()
# Hepsi bitinceye kadar bekle.
t1.join()
t2.join()
t3.join()
Aynı işlemi multiprocessing ile yaparsak aşağıdaki gibi kullanabiliriz.
---
# importing the multiprocessing module
import multiprocessing
import os
def worker1():
# printing process id
print("ID of process running worker1: {}".format(os.getpid()))
def worker2():
# printing process id
print("ID of process running worker2: {}".format(os.getpid()))
if __name__ == "__main__":
# printing main program process id
print("ID of main process: {}".format(os.getpid()))
# creating processes
p1 = multiprocessing.Process(target=worker1)
p2 = multiprocessing.Process(target=worker2)
# starting processes
p1.start()
p2.start()
# process IDs
print("ID of process p1: {}".format(p1.pid))
print("ID of process p2: {}".format(p2.pid))
# wait until processes are finished
p1.join()
p2.join()
# both processes finished
print("Both processes finished execution!")
# check if processes are alive
print("Process p1 is alive: {}".format(p1.is_alive()))
print("Process p2 is alive: {}".format(p2.is_alive()))
---
Ayrıntılı bilgi