Need some assistance with Python threading/queue

import threading
import Queue
import urllib2
import time

class ThreadURL(threading.Thread):

    def __init__(self, queue):
        threading.Thread.__init__(self)

        self.queue = queue

    def run(self):
        while True:
            host = self.queue.get()
            sock = urllib2.urlopen(host)
            data = sock.read()

            self.queue.task_done()

hosts = ['http://www.google.com', 'http://www.yahoo.com', 'http://www.facebook.com', 'http://stackoverflow.com']
start = time.time()

def main():
    queue = Queue.Queue()

    for i in range(len(hosts)):
        t = ThreadURL(queue)
        t.start()

    for host in hosts:
        queue.put(host)

    queue.join()

if __name__ == '__main__':
    main()
    print 'Elapsed time: {0}'.format(time.time() - start)

Я пытался понять, как выполнять Распределение потоков, и после нескольких руководств я пришел к описанному выше.

Что он должен делать:

  1. Инициализировать очередь
  2. Создать мой пул потоков, а затем поставить в очередь список хостов
  3. Затем мой класс ThreadURL должен начать работу, как только хост окажется в очереди и прочитает данные веб-сайта
  4. Программа должна завершиться

В первую очередь я хочу знать, правильно ли я это делаю? Это лучший способ обработки потоков?

Во-вторых, моя программа не завершается. Он распечатывает строку Истекшее время и зависает там. Я должен убить свой терминал, чтобы он ушел. Я' m предполагая, что это произошло из-за неправильного использования мной queue.join () ?

6
задан dave 9 November 2010 в 06:33
поделиться