python爬虫中多线程的使用详解

  

  

队列是python的标准库,俗称队列。可以直接引进口用,在python2.x中,模块名为Queue.python3直接队列即可

  

在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。

        #多线程实战栗子(糗百)   #用一个队列队列对象,   #先产生所有网址,进队列;   #开启多线程,把队列队列作为参数传入   #主函数中读取url   进口的要求   从队列进口队列   进口稀土,os线程、时间   #构造所有ip地址并添加进队列队列   头={   “用户代理”:“Mozilla/5.0 (Windows NT 6.1;AppleWebKit WOW64)/537.36 (KHTML,像壁虎)Chrome/65.0.3325.181 Safari/537.36”   }   urlQueue=队列()   [urlQueue.put (“http://www.qiumeimei.com/image/page/{}”.format(我)我的范围(14)]   def get_image (urlQueue):   而真正的:   试一试:   #不阻塞的读取队列数据   url=urlQueue.get_nowait ()   #我=urlQueue.qsize ()   除了例外e:   打破   当前线程打印(“名字% s, Url: % s的% (threading.currentThread () . Name, Url))   试一试:   res=请求。get (url,标题=标题)   url_infos=re.findall (“data-lazy-src=" https://www.yisu.com/zixun/(. * ?)“‘res.text re.S)   在url_infos url_info:   如果os.path。存在(img_path + url_info [-20]):   打印(“图片已存在的)   其他:   形象=请求。get (url_info header=头)   张开(img_path + url_info[-20年],“世界银行”)作为外交政策:   time . sleep (1)   fp.write (image.content)   打印(“正在下载:“+ url_info)   除了例外e:   打印(e)   if __name__==癬_main__”:   开始时间=time.time ()   #定义图片存储路径   img_path='。/img/'   如果不是os.path.exists (img_path):   os.mkdir (img_path)   线程=[]   #可以调节线程数,进而控制抓取速度   threadNum=4   因为我在范围(0,threadNum):   t=线程。线程(目标=get_image args=(urlQueue,))   threads.append (t)   在线程t:   t.start ()   在线程t:   #多线程多加入的情况下,依次执行各线程的加入方法,这样可以确保主线程最后退出,且各个线程间没有阻塞   t.join ()   endTime=time.time ()   打印('做,时间成本:% s % (endTime -开始时间))      

  

以上所述是小编给大家介绍的python爬虫中多线程的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持。
  如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

python爬虫中多线程的使用详解