2017-09-26 105 views
1

我试图调整自己的代码,第一个版本是herePython的重构与线程和队列

我想是运行两个对象同时

from queue import Queue 
from threading import Thread 
from html.parser import HTMLParser 
import urllib.request 

NUMBER_OF_THREADS = 3 

HOSTS = ["http://yahoo.com", "http://google.com", "http://ibm.com"] 


class MyHTMLParser(HTMLParser): 
    def handle_starttag(self, tag, attrs): 
     print("Start tag:", tag) 
     for attr in attrs: 
      print("\tattr:", attr) 


class ProducerThread(Thread): 
    def __init__(self,queue): 
     super(ProducerThread, self).__init__() 
     self.queue = queue 

     def run(self): 
      while True: 
       for host in HOSTS: 
        url = urllib.request.urlopen(host) 
        content = str(url.read(4096))      
        queue.put(content) 


class ConsumerThread(Thread): 
    def __init__(self,queue): 
     super(ConsumerThread, self).__init__() 
     self.queue = queue 


     def run(self): 
      while True: 
       item = queue.get() 
       parser = MyHTMLParser() 
       new_con = parser.feed(item) 
       print(new_con) 
       queue.task_done() 


if __name__ == '__main__': 
    queue = Queue() 

    p = ProducerThread(queue) 
    c = ConsumerThread(queue) 
    p.start() 
    c.start() 

当我从终端运行的代码没有output.What我应该改变?

回答

2

Unindent run方法,以便他们不在__init__方法。

但是,请注意,你几乎肯定不希望那些永远循环;删除while True