python数据堵塞时要如何处理,数据生产数度大于处理速度,python数度,例如:# -*- cod
python数据堵塞时要如何处理,数据生产数度大于处理速度,python数度,例如:# -*- cod
例如:
# -*- coding: utf-8 -*-import requestsimport refor i in range(5000,5484): url = 'http://www.meizitu.com/a/'+str(i)+'.html' headers = { 'User-Agent': 'Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)' } r = requests.get(url, headers=headers) r.encoding = 'gb2312' par = re.compile('<img alt="(.*?)" src="(.*?)" /><br />', re.S) items = re.findall(par, r.text) for item in items: print item[0], item[1] down = requests.get(item[1], headers=headers) with open('img3/%s.jpg' % item[0], 'wb') as f: f.write(down.content)
for迭代产生的数据 比解析下载的速度快造成堵塞
主要讲讲方法不局限示例代码。
IO操作的话当然速度会慢些。以题主这种网络IO为例,在3.x中最好的解决方案自然是asyncio+aiohttp,requests并不支持异步,aiohttp的client部分的api接口其实和requests也是类似。
对于一种常见的说法:IO(网络,数据库,磁盘)任务使用线程,计算使用进程。做了一些实验,建议是如果不使用异步的话尽量都使用进程。
io操作肯定是要比正常的操作的慢的。
提供一下我的思路,首先我觉得多线程或者多进程不合适。可以将解析和下载抽象为两个方法,两者通过消息队列通信,这就是生产者消费者模型。如果你的的程序小到实现消息队列太复杂,可以先运行解析函数,将解析后的url写入一个文本,数据库或者干脆在内存维护一个列表,完成之后再启动下载函数,从文本,数据库或则列表读取参数。
虽然对python不是很熟,但是也了解过这个问题,让代码异步执行,python也有相应的库的
想让你的下载速度提速一倍吗?如果想的话,就不要再写 requests.get 这种代码了!
使用 requests.Session 预先创建一个 Session 对象,然后请求时使用 Session.get 等方法,对于同服务器的大量下载可提速一倍以上(当然服务器需要支持 Keep-Alive;一般服务器都支持的)。
你并没有遇到任何关于生产比消费快的问题,因为你根本就没有队列!任务根本堆不起来嘛。所以,你应该考虑的是怎么提高下载速度,而不是处理并不存在的「堵塞」。
消息队列可破
你可以使用 celery 来异步处理,把获取的图片都分配给 celery 的 worker 去处理。
解析页面获取图片链接和从图片链接下载图片是两个步骤,可以分开处理,将匹配到的链接都存进redis等内容的队列里面,第一步结束,然后再从队列里面拿链接下载图片,第二部结束
题主能否解释一下【for迭代产生的数据 比解析下载的速度快造成堵塞】这句话?
我觉得多开几个线程可能不一定有效率的优化,但是至少可以解决当前面对的问题。
编橙之家文章,
相关内容
- 怎么样能快速深入的学会Python语言,学会python语言,专职
- Python文件头部#!/usr/bin/python与#!/usr/bin/env区别是什么,
- 新手学习python从哪个版本开始比较好,新手python,学习
- Python找图片不同算法应该用什么方法,,找茬那种游戏,
- Python语言在哪类公司应用居多,python语言在哪居多,一般
- 学习Python django难吗?求分享点经验,pythondjango,打算学习
- Python语言做为php拓展视野的方向如何,pythonphp拓展视野
- Python交错合并列表如何操作更优雅,python交错,比如a
- Python IDE哪各最适合windows下使用,pythonide,我经常在win
- Python实碛日志收集思路探讨,python碛日志思路,在项目上
评论关闭