04-07-2018, Saat: 22:21
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.
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:
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...
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(url, sayi):
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(url, sayi)
sayi += 1
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(url, sayi):
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 = indir, args=(url, sayi)).start()
sayi += 1
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...
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club