folder Tahribat.com Forumları
linefolder Python
linefolder Python Threading Ve Queue



Python Threading Ve Queue

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iKlotho
    iKlotho's avatar
    Kayıt Tarihi: 06/Haziran/2015
    Erkek
    import Queue,threading,time
    q = Queue.Queue()
    
    
    def worker():
    	print "Worker starting..."
    	for i in range(3):
    		print str(i) + " is starting."
    		time.sleep(1)
    		print str(i) + " is complete."
    		q.put(i)
    
    def upload():
    	if q.qsize() != 0:
    		uplink = q.get()
    		print "\nFinished prcs catched, file uploading..."
    		time.sleep(2)
    		print str(uplink) + " was uploaded."
    		q.task_done()
    		if q.qsize() == 0:
    			return False
    	return True
    	
    if __name__ == "__main__":
    	w = threading.Thread(target=worker)
    	w.start()
    	while True:
    		if not upload():
    			break
    	q.join()
    	w.join()
    	

    Bu kodlar pseudo kafamdaki olayı anlatmak için yazdım. Burada worker fonkunun sleep'ini upload fonkundan yüksek tutunca kuyruğa veri geç eklendiği için while'dan çıkıyor diğer verileri işlemiyor, başka türlü while'dan çıkma mekanizması aklıma gelmedi. Ama yapmak istediğim olay bu. Örnekle açıklarsam, 1. fonksiyon videoları indiricek indirilen video  upload edilecek bu sırada videoların inmesi devam edicek. Gerçek kodda video indirmeler bazen uploaddan uzun veya kısa oluyor o yüzden örnek olması için sleep ekledim.
    Soruma gelirsek kuyruğa yeni veri eklendikçe eklenen veriyi nasıl işleme sokabilirim ?


    Too weird to live, too rare to die.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    Queue mantığının damına koymuşsun hocam :D

    https://docs.python.org/2/library/queue.html#Queue.Queue.join

    örneğin en sonundaki q.join yerine while koydun mu tamamdır

    genel mantık bu şekildedir

    ne yaptığından bahsetsen daha açık bir şekilde, belki faydamız dokunacak da

    youtube'a spam bot yazıon herhalde ? :D

     

    mantık değiştirecek olursak

    1- downloader.py

    2- uploader.py

     

    downloader.py : verilen urlleri indiren, indirinceye kadar dosya ismi dosya.tmp kalacak

    uploader.py : .tmp dosyalarını yoksayarak, bulduğu dosyaları upload edecek, sonra silecek

    YekteranBaymedir tarafından 11/Kas/15 20:44 tarihinde düzenlenmiştir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iKlotho
    iKlotho's avatar
    Kayıt Tarihi: 06/Haziran/2015
    Erkek
    Daft bunu yazdı

    Queue mantığının damına koymuşsun hocam :D

    https://docs.python.org/2/library/queue.html#Queue.Queue.join

    örneğin en sonundaki q.join yerine while koydun mu tamamdır

    genel mantık bu şekildedir

    ne yaptığından bahsetsen daha açık bir şekilde, belki faydamız dokunacak da

    youtube'a spam bot yazıon herhalde ? :D

     

    mantık değiştirecek olursak

    1- downloader.py

    2- uploader.py

     

    downloader.py : verilen urlleri indiren, indirinceye kadar dosya ismi dosya.tmp kalacak

    uploader.py : .tmp dosyalarını yoksayarak, bulduğu dosyaları upload edecek, sonra silecek

    Öyle bi şey spam değil de (bi düşününce spam da olabilir :P) bi site var oradan videoları çekip ffmpegle renderleyip youtube 'a upluyorum. Sorun şu ki çok zaman alıyor ilk once videolar iniyor sonra render sonra upload ölüm. Yapmak istediğim olay dediğin gibi videolar inerken inen videoları renderlıcak aynı sırada video inmesi devam edicek sonra renderlanan uplanacak, bu dediğimi yapmıştım ama rendera gerek kalmadığını fark ettim aradan onu çıkarınca işler karıştı kuyruğa veriler geç girdiği için döngümden çıkıyor diğerlerini uplamıyor ffmpeg varken aradaki sureyi renderla kapıyordum.

     

    iKlotho tarafından 11/Kas/15 21:21 tarihinde düzenlenmiştir

    Too weird to live, too rare to die.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    diyom ya 2 tane sürekli arkaplanda çalışan script yazıcan

    downloader socket ile veya txt dosyası ile urlleri alacak

    sadece downloader'ın erişebildiği daha_önce_indirdiklerim.txt olacak böylece aynı videoyu tekrar tekrar indirmeyecek

    download bitene kadar dosya uzantısı .tmp olacak

     

    uploader aynı klasördeki uzantısı tmp olmayan videoları bulacak (glob.glob) 

    upload sorunsuz hallolunca da dosyayı silecek

     

    thread mhread uğraşmaya gerek yok böyle daha kolay olur 

    tek yapman gereken url listesini güncellemek

    echo "yeni url" >> urllist.txt gibi

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Naacal
    Naacal's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    import threading,Queue,time,random
    
    THREADS = 10
    
    class Run(threading.Thread):
    
        def __init__(self, queue):
            self.__queue = queue
            threading.Thread.__init__(self)
    
        def run(self):
            while 1:
                item = self.__queue.get()
                if item is None:
                    break
    
                time.sleep(random.randint(10, 100) / 1000.0)
    
                print "task", item, "finished"
    
    queue = Queue.Queue(0)
    
    for i in range(THREADS):
        Run(queue).start()
    
    for i in range(10):
        queue.put(i)
    
    for i in range(THREADS):
        queue.put(None)

    boyle bir kontrolcu tanimlasan iyi olmaz mi umut kardesim?

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iKlotho
    iKlotho's avatar
    Kayıt Tarihi: 06/Haziran/2015
    Erkek
    Naacal bunu yazdı
    import threading,Queue,time,random
    
    THREADS = 10
    
    class Run(threading.Thread):
    
        def __init__(self, queue):
            self.__queue = queue
            threading.Thread.__init__(self)
    
        def run(self):
            while 1:
                item = self.__queue.get()
                if item is None:
                    break
    
                time.sleep(random.randint(10, 100) / 1000.0)
    
                print "task", item, "finished"
    
    queue = Queue.Queue(0)
    
    for i in range(THREADS):
        Run(queue).start()
    
    for i in range(10):
        queue.put(i)
    
    for i in range(THREADS):
        queue.put(None)

    boyle bir kontrolcu tanimlasan iyi olmaz mi umut kardesim?

     

    Harbiden nasıl aklıma gelmedi :D Teşekkür ettim şuan istediğim gibi oldu. http://paste.ubuntu.com/13231932/


    Too weird to live, too rare to die.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iKlotho
    iKlotho's avatar
    Kayıt Tarihi: 06/Haziran/2015
    Erkek
    Daft bunu yazdı

    diyom ya 2 tane sürekli arkaplanda çalışan script yazıcan

    downloader socket ile veya txt dosyası ile urlleri alacak

    sadece downloader'ın erişebildiği daha_önce_indirdiklerim.txt olacak böylece aynı videoyu tekrar tekrar indirmeyecek

    download bitene kadar dosya uzantısı .tmp olacak

     

    uploader aynı klasördeki uzantısı tmp olmayan videoları bulacak (glob.glob) 

    upload sorunsuz hallolunca da dosyayı silecek

     

    thread mhread uğraşmaya gerek yok böyle daha kolay olur 

    tek yapman gereken url listesini güncellemek

    echo "yeni url" >> urllist.txt gibi

    Mantık güzel kafama yattı boş bi zamanda kodları yeniden düzenleyip denicem sağol.


    Too weird to live, too rare to die.
Toplam Hit: 1466 Toplam Mesaj: 7
python thread queue