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)
मैं कैसे थ्रेडिंग प्रदर्शन करने के लिए चारों ओर मेरे सिर प्राप्त करने की कोशिश कर रहा है और कुछ ट्यूटोरियल के बाद, मैं ऊपर ले कर आए हैं के साथ कुछ सहायता की आवश्यकता है।अजगर सूत्रण/कतार
क्या यह करना चाहिए था है:
- कतार Initialiase
- मेरी थ्रेड पूल बनाएं और फिर मेजबान
- मेरे ThreadURL वर्ग फिर काम शुरू करना चाहिए की सूची क़तार एक बार एक मेजबान में है कतार और पढ़ने वेबसाइट डेटा
- कार्यक्रम
खत्म करना चाहिए क्या मैं पहली बार बंद पता करने के लिए है, एक चाहते मैं यह सही ढंग से कर रहा हूँ? क्या यह धागे को संभालने का सबसे अच्छा तरीका है?
दूसरा, मेरा प्रोग्राम बाहर निकलने में विफल रहता है। यह Elapsed time
लाइन प्रिंट करता है और फिर वहां लटकता है। मुझे जाने के लिए मुझे अपने टर्मिनल को मारना है। मुझे लगता है कि यह queue.join()
के गलत उपयोग के कारण है?
मैंने कतार का उपयोग किया क्योंकि यही वह उदाहरण है जो मैंने पढ़ा है उदाहरण/ट्यूटोरियल का उपयोग कर रहे थे। धागे के बीच डेटा भेजते समय कतार केवल उपयोगी क्यों होती है? थ्रेडिंग/क्यूइंग पर मुझे मिली एकमात्र जानकारी ट्यूटोरियल्स थी (जो कोड दिखाती थी और बहुत सारी जानकारी नहीं थी) और ऑफिकल डॉक्स जो मुझे बहुत जटिल थे, समझने के लिए एक धागा शुरुआती। – dave
यदि आप प्रति होस्ट एक थ्रेड लॉन्च कर रहे हैं, तो कतारों से आगे बढ़ना ठीक है और एक होस्ट को __init __() में पास करना ठीक है। लेकिन उस मामले पर विचार करें जहां आपके पास मेजबानों की एक बड़ी सूची है जो आप सीमित संख्या में धागे को खिलाना चाहते हैं। आप काम वितरित करने के लिए एक कतार का उपयोग करेंगे। –