Önce bazı tanımları kısaca yaparak anlatımı netleştirelim.
Process (İşlem): işletim sistemi üzerinde, bir programlama dili ile hazırlanmış ve hafızaya alınmış çalışan programa denir. Her bir programın sadece bir process’i olmak zorunda değil, başlangıç process’i yeni process’ler üretebilir. İki farklı process’in birbirlerinin verilerine erişmesi güvenlik için kısıtlanmış/zorlaştırılmış olabilir.
Thread (İplik): sözlük anlamı en küçük yürütme birimidir. Her thread, çalışabilmek için yukarıda bahsettiğimiz process’e ihtiyaç duyar.
Bir process birden fazla thread barındırabilir ve bu sayede aynı anda birden çok işlem yapabiliriz. Aynı process üzerindeki thread’lerin o process üzerindeki verilere erişebilmesi bizim için çoklu process yerine çoklu thread açmanın avantajı olur. Bu iki kavram dilden bağımsızdır yani Python’a özel değiller hemen hemen her modern dilde thread ve process kavramları kullanılır.
Çoklu thread veya process açarak çalışmak Python içinde hazır gelen modüller ile çok basit şekilde yapılabilir.
Çoklu thread için threading modülü kullanacağız.
Bu modül içerisinde bulunan Thread sınıfı yeni thread’ler oluşturmamız için gerekli. 2 türlü kullanabiliriz; parametre olarak bir fonksiyon vererek ya da Thread sınıfına bağlı bir alt sınıf oluşturup run metodunu tanımlayarak. İkisini de bir örnek ile görelim.
import threading from time import sleep # metot ile kullanımı def thread_metot(ne): print("{} için thread başladı Thread: {}".format(ne, threading.current_thread())) sleep(2) print("{} için thread bitti".format(ne)) thread_m = Thread(target=thread_metot, args=("metotlu kullanım",)) thread_m.start() # subclass ile kullanımı class ThreadSubClass(threading.Thread): def __init__(self, ne): threading.Thread.__init__(self) self.ne = ne def run(self): print("{} için thread başladı Thread: {}".format(self.ne, threading.current_thread())) sleep(2) print("{} için thread bitti".format(self.ne)) thread_sc = ThreadSubClass("subclass ile kullanım") thread_sc.start() # çıktı şu şekilde olacaktır # metotlu kullanım için thread başladı Thread:# subclass ile kullanım için thread başladı Thread: # metotlu kullanım için thread bitti # subclass ile kullanım için thread bitti
Her iki yöntemde de start metodunu çağırmamız gerektiği unutulmamalı.
Metot ile kullanımda fonksiyon ismi verdiğimiz target anahtar kelimesi run metoduna çalıştırması gereken fonksiyonu bildirir. Subclass kullanımında ise direk run metodunu yazarız.
Threadler run metodu bitene ya da bir Exception oluşana kadar hayatta kalırlar. is_alive metodu ile bir thread’in hayatta olup olmadığını kontrol edebiliriz.
Kaynaklar;
https://docs.python.org/3.4/library/threading.html
http://ysar.net/python/threading.html
http://www.kadinyazilimci.com/thread-kavrami/
http://bilgisayarkavramlari.sadievrenseker.com/2007/11/18/islem-process/
http://bilgisayarkavramlari.sadievrenseker.com/2010/03/22/thread-iplik/
Bir cevap yazın