login每天学习一点点,每天进步一点点.
当前位置:首页 >> 多线程爬虫学习第二案例

多线程爬虫学习第二案例

2015-12-29 23:06:00  |  分类: Python |  标签: 阅读(348)评论(0)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : c32 (amd5@qq.com)
# @Blog    : http://cx7863.blog.163.com/
# @Version : 
# @DateTime:  2015-12-29 23:01:42

'''
说明一下:线程之间共享状态、内存、资源,并且它们相互间易于通信。
'''
import threading,urllib2
import datetime,time
import Queue

hosts = ["http://www.baidu.com", "http://news.baidu.com/", "http://tieba.baidu.com/","http://zhidao.baidu.com/", "http://image.baidu.com/"]

class ThreadClass(threading.Thread):
    def __init__(self,queue):
        threading.Thread.__init__(self)
        self.queue = queue
        
    def run(self):
        '''
          run 方法用于要执行的功能
        '''
        #getName()用于获取线程名称
        while True:
            #从队列中获取一个任务
            host = self.queue.get()
            #抓取工作
            url = urllib2.urlopen(host)
            print url.read(500)
            #标记队列工作已完成
            self.queue.task_done()

def main():
    #创建队列实例
    queue = Queue.Queue()
    #生成一个线程池
    for i in range(len(hosts)):
        t = ThreadClass(queue)
        #主程序退出时,子线程也立即退出
        t.setDaemon(True)
        #启动线程
        t.start()
        
    #向队列中填充数数
    for host in hosts:
        queue.put(host)

    #只到所有任务完成后,才退出主程序
    queue.join()

if __name__=='__main__':
    
    st = time.time()
    main()
    print '%f'%(time.time()-st)
上一篇:ubuntu使用nmap查询端口 下一篇:ThinkPHP5 的视图$view->fetch()和$view->display()的区别

猜你喜欢

发表评论:

0.071509s