为什么这个多线程代码执行的次数比应该多5倍?

时间:2013-06-11 19:09:52

标签: python multithreading thread-safety

我不明白为什么这个简单的python示例比它应该执行的时间多5倍:/我查看代码2小时,在Google等上搜索...我真的没有在这里看到问题。任何帮助将不胜感激!

import urllib2
import socket
import Queue
import threading

socket.setdefaulttimeout(10)
verbose = True

hosts = ['game1', 'game2', 'game3', 'game4', 'game5', 'game6']

queue = Queue.Queue()

class ThreadUrl(threading.Thread):

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

    def run(self):
        while True:
            host = self.queue.get()
            url = 'http://{0}.server.com'.format(host)
            f = urllib2.urlopen(url)
            print f.read(1024)
            self.queue.task_done()


def main():

    for i in range(5):
        t = ThreadUrl(queue)
        t.setDaemon(True)
        t.start()

        for host in hosts:
            queue.put(host)

    queue.join()

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:5)

这是因为对于每个线程,您都将所有主机放入队列中。