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内核两倍左右性能是最好的,并不是多多益善。
另外尽量节约内存使用,不要什么都整个读到内存里,大块变量尽量复用,不要过多拷贝。