Python 多线程抓取图片效率实验
来源:互联网 发布:桌面中考倒计时软件 编辑:程序博客网 时间:2024/04/27 20:46
Python 多线程抓取图片效率实验
实验目的:
- 是学习python 多线程的工作原理,及通过抓取400张图片这种IO密集型应用来查看多线程效率对比
import requestsimport urlparseimport osimport timeimport threadingimport Queuepath = '/home/lidongwei/scrapy/owan_img_urls.txt'#path = '/home/lidongwei/scrapy/cc.txt'fetch_img_save_path = '/home/lidongwei/scrapy/owan_imgs/'# 读取保存再文件里面400个urlswith open(path) as f : urls = f.readlines()urls = urls[:400]# 使用Queue来线程通信,因为队列是线程安全的(就是默认这个队列已经有锁)q = Queue.Queue()for url in urls: q.put(url)start = time.time()def fetch_img_func(q): while True: try: # 不阻塞的读取队列数据 url = q.get_nowait() i = q.qsize() except Exception, e: print e break; print 'Current Thread Name Runing %s ... 11' % threading.currentThread().name url = url.strip() img_path = urlparse.urlparse(url).path ext = os.path.splitext(img_path)[1] print 'handle %s pic... pic url %s ' % (i, url) res = requests.get(url, stream=True) if res.status_code == 200: save_img_path = '%s%s%s' % (fetch_img_save_path, i, ext) # 保存下载的图片 with open(save_img_path, 'wb') as fs: for chunk in res.iter_content(1024): fs.write(chunk) print 'save %s pic ' % i# 可以开多个线程测试不同效果t1 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_1")#t2 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_2")#t3 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_3")#t4 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_4")t1.start()#t2.start()#t3.start()#t4.start()t1.join()#t2.join()#t3.join()#t4.join()end = time.time()print 'Done %s ' % (end-start)
实验结果
400图片4线程 Done 12.4431338313线程 Done 12.9201757908 2线程 Done 32.86282992361线程 Done 54.6115460396
总结
Python 自带GIL 大锁, 没有真正意义上的多线程并行执行。GIL 大锁会在线程阻塞的时候释放,此时等待的线程就可以激活工作,这样如此类推,大大提高IO阻塞型应用的效率。顺便吐槽下,这个博客的MD编辑器太垃圾了吧,怎么没人管呢
0 0
- Python 多线程抓取图片效率实验
- Python 多线程抓取图片效率对比
- Python多线程抓取图片
- 用python多线程抓取网站图片,速度极快
- Python 多线程抓取网页
- Python多线程抓取代理服务器
- python多线程抓取类
- python抓取网页图片
- Python抓取图片
- python图片抓取
- python爬虫抓取图片
- python抓取网页图片
- python抓取百度图片
- Python抓取图片Demo
- Python 抓取图片示例
- python抓取图片示例
- python美女图片抓取
- Python抓取网页图片
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- 【NOIP2015】day2_ 跳石头
- 13.UILabel 中的一些属性
- hdu5534 Partial Tree
- POJ3261 Milk Patterns 题解&代码
- Python 多线程抓取图片效率实验
- Ajax基础
- 三层总结
- 学习SpringMVC 笔记
- ubuntu下配置java环境
- Libimseti上的匿名用户推荐系统
- React Native-11.React Native TabBarIOS TabBarIOS.Item组件详解
- android so库的源码路径列表
- 收缩ORACLE表空间