"Enter"a basıp içeriğe geçin

Python Threading Modülü (MultiThread)

Merhaba Arkadaşlar

Python ile yazdığımız program fonksiyonlarının çoğu kez paralel olarak çalışması gerekebilir. Yani iki fonksiyon aynı anda yada bir fonksiyonun farklı değerler ile aynı anda çalışması gerekebilir. Bu durumda fonksiyonu yada fonksiyonları sırasıyla çalıştırmak işimizi görmeyecektir. Örneğin belirttiğimiz değeri, belirttiğimiz aralıklar ile belirttiğimiz kadar ekrana basan (çok belirtili bir cümle oldu, farkındayım) bir program yazalım.

Yukarıda yazdığımız kodu açıklayalım;

Öncelikle bastir diye bir fonksiyon tanımladım ve argüman olarak degersure ve adet argümanlarını aldım. Ardından hangi değerin başladığını belirtip bir döngü oluşturdum. Döngü adet değişkeni 0 dan büyük olduğu sürece devam edecek. Daha sonra belirtilen saniye kadar bekleyip ekrana değer ile zamanı yazıyor, ardından adetten 1 eksiltip tekrar başa dönüyor. Son satır ise gönderilen argümanlar.

Buna göre “Emre Geldegul Blog” değerini 2 saniye arayla 3 kez ekrana bastır dedik. Program sorunsuz bir biçimde çalıştı, isteğimizi yerine getirdi. Ancak dediğimiz gibi aynı anda “CODERLAB Bilişim” değerini 3 saniye arayla 2 kez ekrana bastırmak istesek bunu fonksiyonları sırası ile çalıştırarak yapamayız.

Bu kod önce ekrana 2 saniye arayla 3 kere “Emre Geldegul Blog” yazısını bastırır daha sonra 3 saniye arayla 2 kez “CODERLAB Bilişim” yazısını bastırır. Şimdi Threading modülünü kullanarak paralel olarak çalışacağız.

MultiThreading

Diğer modüllerde olduğu gibi threading modülünü içeriye aktarıyoruz. Bu modülün “thread” sınıfını kullanacağız.

Burada Thread fonksiyonunu t1 ve t2 değişkenlerine atadık, target ile hedef fonksiyonumuzu belirttik ve bu fonksiyona girilecek argümanları args diyerek belirttik. Şimdi bunlara start verme vakti.

Kısacası kodun son hali aşağıda ki şekilde oldu.

Threadlarımızı oluşturduk ve start verdik. Şimdi bir kontrol edelim.

Evet, çalıştı! fonksiyonu aynı anda farklı değerler ile kullandı. Threadı durdurmak için ise _stop() fonksiyonunu kullanabilirsiniz.

Bir döngü ile aynı threadı defalarca çağırabilirsiniz. Problemsiz bir şekilde çalışacaktır (!). Ancak bu durumda threadlar başı boş gezecektir, ne gözleyeni ne kollayanı… kafasına göre takılacaktır.

Açık konuşmak gerekirse threading konusu başlı başına bir derya ve ben bu konuda ciddi bir bilgi birikimine sahip değilim. Yinede bildiğim kadarını paylaşmak istedim. Yinede siz takıldığınız kısımları yorum olarak sormayın yoksa çakılıp kalabilirim 🙂

Ayrıca Python, multi threading konusunda maalesef iyi bir dil değil. Hassas hesaplamalarda kullanımını kesinlikle önermiyoruz.

Yardımcı olabilmek dileklerim ile kolay gelsin.

İlk Yorum Sizden Gelsin

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.