Hoşgeldin, Ziyaretçi:

l Üye Ol

Facebook ile Giriş
Tarih: 11-12-2018, Saat: 06:37
  • http://qpython.club'e Hoşgeldiniz!
  • Forum Kurallarını okumayı unutmayınız.
  • İyi Forumlar...
  • Python Kodları
  • qpython.club Adresimiz Aktiftir...

Turbobit Çeviri [BETA]        PuhuTV indirme        Twitter Status Updater            Facebook Grubu

USD: ---      EUR: ---      BTC: ---

Python Kodları > Programlama Dilleri > Python > Threading Kullanımı >

 Yorum: 10    Görüntülenme: 902
Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
 Threading Kullanımı
04-07-2018, Saat: 22:21,
Çevrimdışı
Admin
Admin Grubu
Üyelik Tarihi: 02-02-2016
Mesajlar : 5,868
Konular:
Rep Puanı: 105
#1
Threading Kullanımı

Threading modülü python'da paralel işlem yapmamıza olanak sağlan kullanımı basit bir modüldür. Normade yazdığımız kodda bir işlem bitmeden bir diğerine geçmez. Ama threading ile aynı anda birden fazla işlem yapabiliriz.

Aşağıdaki kod, normal olarak "url_listesi" içeriğindeki her bir url adresini "indir" fonksiyonuna gönderip "sayi" ile dosya ismine ekleme yaparak "png1.png, png2.png ...." şeklinde sırası ile kaydetmemize yarayan basit bir dosya indirme kodudur. Kodu çalıştırınca siz de göreceksiniz ki birinci indirme işlemi bitmeden bir diğerine geçmez, indirmeleri teker teker yapar.

PHP Kod:
import urllib2

url_listesi 
= [
               "https://www.python.org/static/img/python-logo.png",
               "https://www.python.org/static/img/python-logo.png",
               "https://www.python.org/static/img/python-logo.png",
               "https://www.python.org/static/img/python-logo.png",
              ]
            
            
def indir(urlsayi):
    print 
sayi"indiriliyor..."
    
dosya open("png" str(sayi) + ".png""ab")
    
istek urllib2.urlopen(url)
    
    while 
True:
        
oku istek.read(1024)
        
dosya.write(oku)
        if 
not oku:
            break
        
    
dosya.close()

        
sayi 1

for url in url_listesi:
    
indir(urlsayi)
    
sayi += 


Peki biz bu indirme işlemini threading ile yapamaz mıyız? Tabki de yaparız. Threading ile yukarıdaki kodun yaptığını aynı anda yaparız, yani for döngüsü birinci indirme işleminin tamamlanmasını beklemeden ikinci indirme işlemini çağıracaktır, bu sayede indirmeler eş zamanlı gerçekleşmiş olacaktır.

Threading ile basit indirme kodu ise şu şekilde olacaktır:

PHP Kod:
import threading
import urllib2

url_listesi 
= [
 
              "https://www.python.org/static/img/python-logo.png",
 
              "https://www.python.org/static/img/python-logo.png",
 
              "https://www.python.org/static/img/python-logo.png",
 
              "https://www.python.org/static/img/python-logo.png",
 
             ]
            
            
def indir(urlsayi):
    print 
sayi"indiriliyor..."
    
dosya open("png" str(sayi) + ".png""ab")
    
istek urllib2.urlopen(url)
    
    while 
True:
        
oku istek.read(1024)
        
dosya.write(oku)
        if 
not oku:
            break
        
    
dosya.close()

        
sayi 1

for url in url_listesi:
    
threading.Thread(target indirargs=(urlsayi)).start()
    
sayi += 


Kodu çalıştırınca göreceksiniz ki png1, png2, png3 ve png4 dosyaları aynı anda açılacaktır ve indirmeleri de aynı anda olacaktır. Print ile ekrana bastığımız "indiriliyor.." bile ekrana aynı anda yazacaktır. Bu iki koddaki tek fark, for döngüsündeki "indir" adlı fonsiyonunu çağırma şeklimiz ("import threading" hariç)

1. kodda:
indir(url, sayi)
satırı ile fonksiyonu çağırdık

2. kodda ise:
threading.Thread(target = indir, args=(url, sayi)).start()
satırı ile indir fonksiyonunu çağırdık

Gördüğünüz gibi gayet basit. İyi kullanımlar...
04-07-2018, Saat: 22:21
Cevapla
04-07-2018, Saat: 22:30, (Son Düzenleme: 04-07-2018, Saat: 22:36, Düzenleyen: oktay811.)
Çevrimdışı
Vip üye
Vip Üye
Üyelik Tarihi: 24-01-2017
Mesajlar : 532
Konular:
Rep Puanı: 3
#2
Cvp: Threading Kullanımı

Aklıma bi fikir geldi Big Grin
(Son Düzenleme: 04-07-2018, Saat: 22:36, Düzenleyen: oktay811.)
04-07-2018, Saat: 22:30
Cevapla
04-07-2018, Saat: 23:21,
Çevrimdışı
Geliştirici Üye
Developer
Üyelik Tarihi: 06-03-2016
Mesajlar : 1,279
Konular:
Rep Puanı: 34
#3
RE: Threading Kullanımı

Klavyene sağlık üstad , bu burada dursun balık hafızalı olduğum için arada bakarım Big Grin
04-07-2018, Saat: 23:21
Cevapla
04-07-2018, Saat: 23:28,
Çevrimdışı
Admin
Admin Grubu
Üyelik Tarihi: 02-02-2016
Mesajlar : 5,868
Konular:
Rep Puanı: 105
#4
Cvp: Threading Kullanımı

eyvallah dadaş, valla ben konusu vardı diye biliyodum ama yokmuş Smile

(04-07-2018, Saat: 22:30)oktay811 Nickli Kullanıcıdan Alıntı: Aklıma bi fikir geldi Big Grin

mümkünse senin aklına fikir gelmesin, ondan sonra herkesi bezdiriyon, kendin de beziyon Smile
04-07-2018, Saat: 23:28
Cevapla
04-07-2018, Saat: 23:42,
Çevrimdışı
Admin
Admin Grubu
Üyelik Tarihi: 02-02-2016
Mesajlar : 5,868
Konular:
Rep Puanı: 105
#5
Cvp: Threading Kullanımı

Bu arada ufak bir bilgilendirme daha yapayım, threading modülü ile eş zamanlı işlem yaptığımızda işlemci ve network kapasitesine göre sınırlama koymak gerekir. Bazen çok sayıda eş zamanlı iş parçacıkları kapasiteyi aştığı için hata alabiliriz, yani hepsi işlemeyebilir, hata verebilir. Eğer bu konudaki örnekte 100-200 tane indirme linki olsa muhtemelen kod hata verecektir, işlemci kaldırsa da network kaldırmadığından hata verebilir.

Bu durumda kendi içimizde threading sınırlaması koyarak kontrol altına alabiliriz.

"threading.activeCount()" bize aktif thread sayısını verir

PHP Kod:
..
..
..
# maksimum thread sayisini belirleyelim
maxthreads 10


for url in url_listesi:
    while 
threading.activeCount() >= maxthreads:            
        
time.sleep(0.3#saniyeyi kafaniza gore ayarlayabilirsiniz.
    
threading.Thread(target indirargs=(urlsayi)).start()
    
sayi += 
04-07-2018, Saat: 23:42
Cevapla
04-07-2018, Saat: 23:53,
Çevrimdışı
Vip üye
Vip Üye
Üyelik Tarihi: 24-01-2017
Mesajlar : 532
Konular:
Rep Puanı: 3
#6
Cvp: Threading Kullanımı

gecemor Yanlış bişey yaptıysam özür dilerim.
04-07-2018, Saat: 23:53
Cevapla
05-07-2018, Saat: 00:31,
Çevrimdışı
Admin
Admin Grubu
Üyelik Tarihi: 02-02-2016
Mesajlar : 5,868
Konular:
Rep Puanı: 105
#7
Cvp: Threading Kullanımı

(04-07-2018, Saat: 23:53)oktay811 Nickli Kullanıcıdan Alıntı: gecemor Yanlış bişey yaptıysam özür dilerim.

yok şaka takılıyorum ama ciddiyet payı da yok değil Smile mesela sana zamanında hep dedim şu python temel konuları tamamla diye, bak threading sana engel oldu. Demem o ki daha üst seviye kodlar yapmaya ve editlemeye çalışırken temel konularda eksiğin olduğun için kendin de uğraşıyosun, yerine göre bazı arkadaşları da uğraştırıyosun Smile
05-07-2018, Saat: 00:31
Cevapla
05-07-2018, Saat: 07:53,
Çevrimdışı
Kıdemli Üye
Üye Grubu
Üyelik Tarihi: 14-09-2017
Mesajlar : 188
Konular:
Rep Puanı: 1
#8
RE: Threading Kullanımı

05-07-2018, Saat: 07:53
Cevapla
05-07-2018, Saat: 11:00,
Çevrimdışı
Admin
Admin Grubu
Üyelik Tarihi: 02-02-2016
Mesajlar : 5,868
Konular:
Rep Puanı: 105
#9
Cvp: Threading Kullanımı

@excel ee nedir yani mevzu? "Aslında tam olarak eş zamanlı işlem yapamıyor GIL engel oluyor" falan diyeceksen yanlış konudasın veya yanlış forumda... Çünkü burda verdiğim örneğin basitliğine bakarak GIL tartışması gereksiz olacaktır.
05-07-2018, Saat: 11:00
Cevapla
05-07-2018, Saat: 13:59, (Son Düzenleme: 05-07-2018, Saat: 13:59, Düzenleyen: excel.)
Çevrimdışı
Kıdemli Üye
Üye Grubu
Üyelik Tarihi: 14-09-2017
Mesajlar : 188
Konular:
Rep Puanı: 1
#10
RE: Threading Kullanımı

Tam onu diyecektim Big Grin

Örnekle bi alâkası yok, tartışma amaçlı da değil. Maksat bilgi olsun
(Son Düzenleme: 05-07-2018, Saat: 13:59, Düzenleyen: excel.)
05-07-2018, Saat: 13:59
Cevapla
« Önceki Konu | Sonraki Konu »
Konuyu Okuyanlar: 1 Ziyaretçi



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  PYTHON DO-WHILE KULLANIMI mustafa58 1 1,610 30-06-2017, Saat: 17:14
Son Yorum: asosyetikbiri
  split() kullanımı gecemor 8 5,391 13-11-2016, Saat: 01:50
Son Yorum: gecemor

Hızlı Menü:

Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB
© 2002-2018 MyBB Group.
ImAdige theme by IMADIGE © 2015.