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

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 コアの約 2 倍に達したときに最高のパフォーマンスが得られますが、多ければ多いほど良いというわけではありません。
さらに、メモリ使用量を節約し、すべてをメモリに読み込まず、大きな変数をできるだけ再利用し、コピーしすぎないようにしてください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート