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