Threading,Multiproccess,Thread
-
Sağolsunlar buradaki arkadaşlarım ilgi gösterdiler ama ben pek anlayamamıştım istihza.comda da başlık açmıştım yazılanları aktarıyorum eminim bu şekilde herkes daha rahat anlıycaktır.
Not:Alıntıdır
Kaynak : İstihza.com
Teşekkürler:royan_367 , yasar11732 , fght
royan_367:
Diğer bütün programlama dilleri gibi Python'da da komutlar teker teker işletilir. Bir komutun işi bitmeden diğerine geçilmez. Ancak bu bazı programların yapılmasını imkansız kılar.Mesela bir araba yarışında iki oyuncu var diyelim.Biri oyunu doğru dürüst oynamayan, diğeri bağımlısı. Bu yüzden biri kendini geliştirememiş, diğeri usta olmuş. Bu sebeple biri 1 m/s hızında diğeri 2 m/s hızında gidiyor. Eğer komutlar sırası ile işletilir ise bu oyunculardan ilki hareketi esnasında 1/2 m/s diğeri de 1 m/s hızıyla hareket ediyor olacaktır. Çünkü ikisi de bir sonraki hareketi için diğer oyuncu için de bir saniye beklemek zorundadır. Bu noktada "İkiyle çarparız olur biter diyebilirsiniz". Ancak bir de şunu düşünün. Eğer oyuncular her döngü tekrarında aynı mesafeyi gidiyorlarsa o zaman gidilen yolun iki katına çıkarılması yerine zaman yarıya düşürülür. Yani ilk oyuncu 2 m/2 s, ikincisi 2 m/s hızında gidiyor olur. Bu da aynı yoldur. Ancak burada tahmin edilmesi zor bir sıkıntı çıkar. İlk oyuncu toplamda 3 saniye beklemek zorundadır. Yani hızı 2/3 m/s olur. İkinci oyuncu da toplamda 3 saniye beklemek zorundadır. Yani onun da hızı 2/3 m/s olur. Biz biri diğerinin 2 katı hızlı gidiyor derken ikisi de aynı hızda gidiyor.. İkinci oyuncunun bütün emekleri heba oldu!..
Gördüğünüz gibi bazen threading kullanmamak başımıza dert açabilir. O yüzden yukarıdaki gibi durumlarda threading en iyi yoldur. Basitçe açıklamak gerekirse threading olayında komutlar birbirini beklemez. aynı anda çalışmaya başlarlar. Mesela yukarıdaki örnekte her oyuncu her hareketi için kendisi için belirlenen zaman kadar bekler. Böylece hiç bir sıkıntı çıkmaz.
Daha iyi anlayabilmeniz için örnek bir program hazırladım ve aşağıya koydum:from threading import Thread
from time import sleep
# threading kullanan sinif
class Sinif(Thread):
def __init__(self, ilk, son, sure):
Thread.__init__(self)
self.ilk = ilk
self.son = son
self.sure = sure
def run(self):
sleep(self.sure) # "self.sure" kadar bekle(saniye olarak)
print self.ilk
print self.son
# threading kullanan siniftan turemis nesneler
ornek1 = Sinif("ali", "veli", 5)
ornek2 = Sinif("hasan", "husen", 4)
ornek3 = Sinif("iso", "im", 3)
print "threading olmadan(5 + 4 + 3 = 12 saniye surer):"
#!! asagidaki uc komut sirasiyla baslar ve birinin baslamasi icin digerinin bitmesi beklenir!
ornek1.run()
ornek2.run()
ornek3.run()
print "threading ile(5 saniye surer):"
#!!!!!! asagidaki uc komut sirasiyla baslar, ancak digerinin baslamasi icin oncekinin bitmesi beklenmez!!!
ornek1.start()
ornek2.start()
ornek3.start()Not: threading de olayları birbiriyle senkronize de edebilirsiniz, ancak ben bunu bilmediğim için burada anlatamıyorum, sadece böyle bir şey de var demek istedim.
Saygılar...fght:
thread, multiprocessing ve threading arasında ne tür farklar var? Daha önce ikisi arasındaki farkı sormuştum bu defa üçü arasındaki farkı sorayım dedim.royan_367 :
"thread" asıl işi yapan modül, ancak derlenmiş. "threading" ise "py" uzantılı, içinde şu satırlar da var:Kod: try:
import thread
except ImportError:
del _sys.modules[__name__]
raise
Bu tıpkı "Tkinter" ın "_tkinter" adlı derlenmiş bir modülü içe aktarması gibi. Onda da asıl işi yapan "_tkinter".
"threading"(dolayısıyla "thread") ve "multiprocessing" arasındaki farkı @yasar11732 şurada anlatmış(10. mesaj).
Saygılar...
Ek kaynak:http://yasararabaci.tumblr.com/post/30181266866/python-threading-modulu
Eminim yardımcı olucaktır herkese tekrar teşekkürler