Python Çoklu Fonksiyonları Aynı Anda Çalıştırma

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.

Python'da iki fonksiyonu aynı anda eş zamanlı çalıştırmak için aşağıdaki kodu kullanabilirsiniz. Kodu kullanmadan önce "threading" modülünü yüklediğinizden emin olun.


---
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

Google