python多线程多队列,python多线程队列,程序大概内容如下: 程序


程序大概内容如下:

程序中设置两个队列分别为queue负责存放网址,out_queue负责存放网页的源代码。

ThreadUrl线程负责将队列queue中网址的源代码urlopen,存放到out_queue队列中。

DatamineThread线程负责使用BeautifulSoup模块从out_queue网页的源代码中提取出想要的内容并输出。

这只是一个基本的框架,可以根据需求继续扩展。

    import Queue      import threading      import urllib2      import time      from BeautifulSoup import BeautifulSoup      hosts = ["http://yahoo.com","http://taobao.com","http://apple.com",               "http://ibm.com","http://www.amazon.cn"]      queue = Queue.Queue()#存放网址的队列      out_queue = Queue.Queue()#存放网址页面的队列      class ThreadUrl(threading.Thread):          def __init__(self,queue,out_queue):              threading.Thread.__init__(self)              self.queue = queue              self.out_queue = out_queue          def run(self):              while True:                  host = self.queue.get()                  url = urllib2.urlopen(host)                  chunk = url.read()                  self.out_queue.put(chunk)#将hosts中的页面传给out_queue                  self.queue.task_done()#传入一个相当于完成一个任务      class DatamineThread(threading.Thread):          def __init__(self,out_queue):              threading.Thread.__init__(self)              self.out_queue = out_queue          def run(self):              while True:                  chunk = self.out_queue.get()                  soup = BeautifulSoup(chunk)#从源代码中搜索title标签的内容                  print soup.findAll(['title'])                  self.out_queue.task_done()      start = time.time()      def main():          for i in range(5):              t = ThreadUrl(queue,out_queue)#线程任务就是将网址的源代码存放到out_queue队列中              t.setDaemon(True)#设置为守护线程              t.start()          #将网址都存放到queue队列中          for host in hosts:              queue.put(host)          for i in range(5):              dt = DatamineThread(out_queue)#线程任务就是从源代码中解析出<title>标签内的内容              dt.setDaemon(True)              dt.start()          queue.join()#线程依次执行,主线程最后执行          out_queue.join()      main()      print "Total time :%s"%(time.time()-start)  

评论关闭