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核心兩倍左右效能是最好的,並不是多多益善。
另外盡量節約記憶體使用,不要什麼都整個讀到記憶體裡,大塊變數盡量重複使用,不要過多拷貝。