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

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

大家讲道理
大家讲道理

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

répondre à tous(1)
小葫芦

Votre python est un processus 32 bits. L'espace d'adressage mémoire du processus 32 bits est de 4 Go, dont seulement 2 Go sont utilisés par le processus utilisateur et les 2 Go restants sont réservés au noyau. Le passage à Python 64 bits peut atténuer ce problème. Mais le meilleur moyen est de limiter le nombre de processus que vous pouvez ouvrir et de limiter le nombre de threads dans chaque processus à un nombre pas trop élevé. En fait, les meilleures performances sont obtenues lorsque le nombre total de threads atteint environ le double du cœur du processeur, et plus n'est pas toujours mieux.
De plus, essayez d'économiser l'utilisation de la mémoire, ne lisez pas tout dans la mémoire, réutilisez autant que possible les variables volumineuses et ne copiez pas trop.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal