RT,我最近写一个爬虫,需要从一个网站抓取大量数据,先用开启十个线程使用httplib模块从一个list页面中获取大概一百多万条id,塞入一个queue队列中,然后再开十个线程使用httplib模块从刚才那个queue队列中取出id,通过这些id再去一个view页面把正文内容抓取出来写入mongo数据库,但是现在发现只要python进程内存占用达到1.9G之后httplib模块就开始报内存溢出错误,请问这是什么原因?(我现在初步猜测是queue中存了几百万的id数据导致内存占用过多,httplib模块申请不到内存了)有什么办法可以解决吗?(因为访问那个list页面需要带上cookie,所以我才用httplib模块,如果有其他模块可以带上cookie发起请求的话也麻烦告诉我一下),求高人指点,感激不尽
Ular sawa anda ialah proses 32-bit Ruang alamat memori bagi proses 32-bit ialah 4GB, yang mana hanya 2GB digunakan oleh proses pengguna, dan 2GB yang lain dikhaskan untuk kernel. Beralih kepada Python 64-bit boleh mengurangkan masalah ini. Tetapi cara terbaik ialah mengehadkan bilangan proses yang boleh anda buka dan mengehadkan bilangan utas dalam setiap proses kepada tidak terlalu banyak. Malah, prestasi terbaik ialah apabila jumlah bilangan utas mencapai kira-kira dua kali ganda teras CPU, dan lebih banyak lagi tidak selalunya lebih baik.
Selain itu, cuba simpan penggunaan memori, jangan baca segala-galanya ke dalam memori, gunakan semula pembolehubah besar sebanyak mungkin, dan jangan terlalu banyak menyalin.