java - python只要占用内存达到1.9G之后httplib模块就开始报内存溢出错误
大家讲道理
大家讲道理 2017-04-18 10:03:15
0
1
408

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(1)
小葫芦

귀하의 Python은 32비트 프로세스입니다. 32비트 프로세스의 메모리 주소 공간은 4GB이며, 그 중 2GB만 사용자 프로세스에서 사용되고 나머지 2GB는 커널용으로 예약되어 있습니다. 64비트 Python으로 전환하면 이 문제를 완화할 수 있습니다. 그러나 가장 좋은 방법은 열 수 있는 프로세스 수를 제한하고 각 프로세스의 스레드 수를 너무 많지 않도록 제한하는 것입니다. 실제로 최고의 성능은 총 스레드 수가 CPU 코어의 약 두 배에 도달할 때이며, 더 많다고 해서 항상 더 좋은 것은 아닙니다.
또한, 메모리 사용량을 절약하고, 모든 것을 메모리로 읽어오지 말고, 큰 변수를 최대한 재사용하고, 너무 많이 복사하지 마십시오.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿