python只要占用内存达到1.9G之后httplib模块就开始报内存溢出错误
博彩导航网站排行榜
博彩导航网站排行榜
当前位置 : 博彩导航网站排行榜 > 博彩导航网站排行榜

python只要占用内存达到1.9G之后httplib模块就开始报内存溢出错误

RT,我最近写一个爬虫,需要从一个网站抓取大量数据,先用开启十个线程使用httplib模块从一个list页面中获取大概一百多万条id,塞入一个queue队列中,然后再开十个线程使用httplib模块从刚才那个queue队列中取出id,通过这些id再去一个view页面把正文内容抓取出来写入mongo数据库,但是现在发现只要python进程内存占用达到1.9G之后httplib模块就开始报内存溢出错误,请问这是什么原因?(我现在初步猜测是queue中存了几百万的id数据导致内存占用过多,httplib模块申请不到内存了)有什么办法可以解决吗?(因为访问那个list页面需要带上cookie,所以我才用httplib模块,如果有其他模块可以带上cookie发起请求的话也麻烦告诉我一下),求高人指点,感激不尽

你的python是32位进程,32位进程的内存地址空间是4GB,其中只有2GB给用户进程使用,另外的2GB内核保留。改用64位Python能缓解这个问题。不过最好的办法是限制一下开多进程,每个进程限制一下线程数量,不要太多。其实总的线程数达到CPU内核两倍左右性能是最好的,并不是多多益善。
另外尽量节约内存使用,不要什么都整个读到内存里,大块变量尽量复用,不要过多拷贝。

1
回复 昌维

requests 自动处理 cookie 的事情,你也可以手工指定。
你用同一个 requests.Session 就可以了。requests 会在同一个 Session 内自动管理连接池。

依云 · 2016年12月10日

展开评论

广告位

博彩导航网站排行榜