Python'da İş Parçacığı Kavramı Hakkında Kısa Bir Anlatım
İçindekiler
- Giriş 🎯
- Python İçinde Çoklu İş Parçacığı Kavramı 🧵
- Python'da Yalancı Çoklu İş Parçacığı Kullanımı 🕸️
- threading Modülünün Kullanımı ⚙️
- threading Modülünde İş Parçacığı Oluşturma 🏭
- İş Parçacığının Durumunu Kontrol Etmek 🚦
- İş Parçacığını Bekletmek ve Tamamlanmasını Sağlamak ⏰
- birden fazla İş Parçacığının Koordinasyonu 🤝
- İş Parçacığı ile Argüman Aktarma 📦
- İş Parçacığı Bekleme 🔍
- Sonuç ve Özet 📝
Giriş
Bu videoda Python'da çoklu iş parçacığı kavramını öğreneceğiz. Python çoğunlukla kullanılan CPython uygulamasında gerçek çoklu iş parçacığı desteği olmadığını bilmek önemlidir. Bunun nedeni, global yorumlayıcı kilididir ve bu noktada ayrıntıya girmeyeceğiz. Pseudo çoklu iş parçacığı adı verilen bir yapı kullanarak işleri aynı anda ve zaman kavramıyla gerçekleştiririz. İş parçacığı modülü, bu teorik altyapıyı gerçekleştirir. Python ile çoklu iş parçacığı kullanmak için threading modülünü kullanırız. Bu modülü kullanarak iş parçacıkları oluşturabilir, durumlarını kontrol edebilir ve koordinasyonlarını yapabiliriz.
Python İçinde Çoklu İş Parçacığı Kavramı
Python'da çoğunlukla kullanılan CPython uygulamasında gerçek çoklu iş parçacığı desteği yoktur. Bunun yerine, pseudo çoklu iş parçacığı yapısı kullanılır. Bu yapıda işler eş zamanlı olarak çalışmaz, fakat görevler arasında geçiş yaparak işleri sırayla gerçekleştiririz. Örneğin, bir istek gönderir ve yanıt beklerken, kullanıcı girişi bekler veya time.sleep() kullanarak beklerken diğer iş parçacıklarının çalışması için uygun bir zaman dilimi kullanırız.
Python'da Yalancı Çoklu İş Parçacığı Kullanımı
Python'da pseudo çoklu iş parçacığı kullanmak için threading modülünü import etmemiz gerekmektedir. threading modülü, iş parçacıklarını yönetmek için gerekli olan işlevleri sağlar. Ayrıca, time modülünü de import ederek zamanlama işlemlerini gerçekleştirebiliriz.
Örnek olarak, threading modülünü kullanarak basit bir çoklu iş parçacığı örneği yapalım. İlk olarak, worker adında bir işlev tanımlayacağız. Bu işlev, basit bir döngü kullanarak sürekli olarak değerleri ekrana yazdıracaktır. Ardından, threading.Thread() yöntemi ile bu işlevi çalıştıran bir iş parçacığı oluşturacağız. İş parçacığı, ana programın işlemesiyle eş zamanlı olarak çalışacak ve devam edecektir. İşte bu şekilde pseudo çoklu iş parçacığı desteğini kullanabiliriz.
threading Modülünün Kullanımı
Python'da çoklu iş parçacığı oluşturmak için threading modülünü kullanırız. Bu modül, iş parçacığı yönetimi için gerekli olan işlevleri sağlar. İş parçacığı oluşturmadan önce threading modülünü import etmemiz gerekmektedir. Böylece threading.Thread() sınıfını kullanabiliriz.
import threading
threading Modülünde İş Parçacığı Oluşturma
İş parçacığı oluşturmak için threading.Thread() sınıfını kullanırız. Bu sınıfın kurucu fonksiyonuna hedef fonksiyonu (worker), argümanları ve diğer parametreleri iletebiliriz. Ardından oluşturulan iş parçacığını başlatmak için start() yöntemini kullanırız.
thread = threading.Thread(target=worker, args=(arg1, arg2))
thread.start()
Bu şekilde başlatılan iş parçacığı, ana iş parçacığıyla eş zamanlı olarak çalışacaktır. İş parçacığı, target parametresine belirtilen fonksiyonu çalıştırır ve işlevin tamamlanmasını bekler. Bu sayede çoklu iş parçacığı desteği sağlamış oluruz.
İş Parçacığının Durumunu Kontrol Etmek
İş parçacığının durumunu takip etmek ve kontrol etmek istiyorsak threading modülündeki fonksiyonları kullanabiliriz. Örneğin, iş parçacığının çalışıp çalışmadığını kontrol etmek için threading.Thread.is_alive() fonksiyonunu kullanabiliriz.
if thread.is_alive():
print("İş parçacığı çalışıyor.")
else:
print("İş parçacığı çalışmıyor.")
Bu fonksiyon, belirtilen iş parçacığının hala çalışıp çalışmadığını kontrol edecektir. Eğer iş parçacığı hala çalışıyorsa "İş parçacığı çalışıyor." çıktısı verecektir. Eğer iş parçacığı çalışmıyorsa "İş parçacığı çalışmıyor." çıktısı verecektir.
İş Parçacığını Bekletmek ve Tamamlanmasını Sağlamak
İş parçacığı tamamlanmadan önce diğer işlemleri bekletmek istiyorsak threading.Thread.join() fonksiyonunu kullanabiliriz. Bu fonksiyon, belirtilen iş parçacığı tamamlanana kadar ana programın çalışmasını durdurur.
thread.join()
Bu şekilde belirtilen iş parçacığının tamamlanmasını bekleyebiliriz. İş parçacığı tamamlandıktan sonra programın diğer kısımları çalışmaya devam eder.
Birden Fazla İş Parçacığının Koordinasyonu
Birden fazla iş parçacığının koordinasyonunu sağlamak için threading modülünün threading.Lock() sınıfını kullanabiliriz. Bu sınıf, kaynaklara erişimi kontrol etmek için kullanılır.
lock = threading.Lock()
Bu şekilde bir kilitleme nesnesi oluşturabiliriz. Bu nesneyi kullanarak belirli bir iş parçacığının kaynağa erişmesini engelleyebiliriz. Bu sayede çakışmaları önleyebilir ve çalışma sırasında tutarlılığı sağlayabiliriz.
İş Parçacığı ile Argüman Aktarma
İş parçacığına argüman geçmek için threading.Thread() yönteminde args parametresini kullanabiliriz. Bu parametreye geçilecek argümanları bir demet olarak belirtiriz.
args = ("arg1", "arg2")
thread = threading.Thread(target=worker, args=args)
Bu şekilde belirtilen argümanları, iş parçacığının hedef fonksiyonuna iletebiliriz. İş parçacığı bu argümanları kullanarak istenilen işlemleri gerçekleştirebilir.
İş Parçacığı Bekleme
Bir iş parçacığının tamamlanmasını beklemek için threading.Thread.join() yöntemini kullanabiliriz. Bu yöntem, belirtilen iş parçacığının tamamlanmasını bekler ve sonra devam eder.
thread.join()
Bu şekilde belirtilen iş parçacığının tamamlanmasını bekleyebiliriz. İş parçacığı tamamlandıktan sonra program grupça devam eder.
Sonuç ve Özet
Python'da çoklu iş parçacığı kullanmak, aynı anda farklı işlemleri gerçekleştirmek için kullanışlı bir yöntemdir. threading modülünü kullanarak iş parçacıkları oluşturabilir, onların durumlarını kontrol edebilir, koordinasyonlarını sağlayabilir ve birbirleriyle iletişim kurabiliriz. Bu sayede programların verimliliği artırabilir ve daha hızlı sonuçlar alabiliriz.
Bu yazıda Python'da çoklu iş parçacığı kavramını detaylı bir şekilde öğrendik. İlk olarak çoklu iş parçacığı kavramının ne olduğunu ve Python'da nasıl çalıştığını anlattık. Ardından threading modülünün nasıl kullanıldığını ve iş parçacığı oluşturma yöntemlerini anlattık. Son olarak, iş parçacıklarının durumunu kontrol etme, bekletme ve birden fazla iş parçacığının koordinasyonunu sağlama konularını ele aldık.
Python'da çoklu iş parçacığı kullanarak programlarınızı daha hızlı ve verimli hale getirebilirsiniz. Ancak, iş parçacıklarının koordinasyonuna dikkat etmek ve çakışmaları önlemek önemlidir. Doğru şekilde kullanıldığında, çoklu iş parçacığı desteği programlarınızı daha güçlü hale getirebilir ve kullanıcı deneyimini iyileştirebilir.
İyi programlama! 🚀
FAQ
S: Python'da gerçek çoklu iş parçacığı desteği var mı?
E: Hayır, çoğunlukla kullanılan CPython uygulamasında gerçek çoklu iş parçacığı yoktur. Python, pseudo çoklu iş parçacığı yapısını kullanır.
S: İş parçacıklarını bekletebilir miyim?
E: Evet, bir iş parçacığının tamamlanmasını beklemek için threading.Thread.join() yöntemini kullanabilirsiniz.
S: İş parçacığıyla argüman aktarabilir miyim?
E: Evet, threading.Thread() yönteminde args parametresini kullanarak iş parçacığına argüman geçebilirsiniz.
S: Birden fazla iş parçacığını nasıl koordine edebilirim?
E: threading.Lock() sınıfını kullanarak birden fazla iş parçacığı arasındaki koordinasyonu sağlayabilirsiniz. Bu sınıf, kaynaklara erişimi kontrol etmek için kullanılır.
S: İş parçacığı güvenli midir?
E: İş parçacıkları, doğru şekilde kullanıldığında güvenli olabilir. Ancak, çakışmalar ve senkronizasyon sorunları gibi sorunlara dikkat etmek önemlidir.