我想了解如何使用線程和我在http://www.ibm.com/developerworks/aix/library/au-threadingpython/爲什麼使用線程和Python中
#!/usr/bin/env python
import Queue
import threading
import urllib2
import time
hosts = ["http://yahoo.com", "http://google.com", "http://amazon.com",
"http://ibm.com", "http://apple.com"]
queue = Queue.Queue()
class ThreadUrl(threading.Thread):
"""Threaded Url Grab"""
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while True:
#grabs host from queue
host = self.queue.get()
#grabs urls of hosts and prints first 1024 bytes of page
url = urllib2.urlopen(host)
print url.read(1024)
#signals to queue job is done
self.queue.task_done()
start = time.time()
def main():
#spawn a pool of threads, and pass them queue instance
for i in range(5):
t = ThreadUrl(queue)
t.setDaemon(True)
t.start()
#populate queue with data
for host in hosts:
queue.put(host)
#wait on the queue until everything has been processed
queue.join()
main()
print "Elapsed Time: %s" % (time.time() - start)
我不明白的部分是跨越這個很好的例子就需要無限循環爲什麼run
方法有一個無限循環:
def run(self):
while True:
... etc ...
只是爲了笑我跑的程序,而不循環,它看起來運行良好! 那麼有人可以解釋爲什麼需要這個循環? 循環如何退出,因爲沒有break語句?
直到線程停止,循環纔會退出。 – Ryan
誰說這是*需要*?不是。不過,這正是這個程序需要的。我懷疑你的問題是:爲什麼這個程序不能在無限循環中卡住? –
我不認爲沒有某種循環,程序「運行良好」,因爲它只能處理主機URL之一。 – martineau