5

これは、メモリ使用量を継続的に増加させるスクリプトの簡素化されたバージョンです。2 分後に 600MB を超えることがわかりました。

import requests
import grequests

lines = (grequests.get(l.strip(), timeout=15) for l in open('links.txt') if len(l.strip()))

for r in grequests.imap(lines, size=20):
    if r.ok:
        print r.url

links.txt は多数の URL を含むファイルです。問題は、私が収集したいくつかの大きな URL グループで発生します。応答オブジェクトが延期されていないように思えますか?

今日、gevent、requests、grequests を更新しました。バージョンは次のとおりです。

In [2]: gevent.version_info
Out[2]: (1, 0, 0, 'beta', 3)

In [5]: requests.__version__
Out[5]: '0.13.5'

grequests には、私が見つけたバージョン番号がありません。

ご回答ありがとうございます。

4

3 に答える 3

0

私の見解では、すべてのリンクを同時に開こうとしたことが原因でした。次のようなことを試してください:

links = set(links)
while links:
    calls = (grequests.get(links.pop()) for x in range(200)) 
    for r in calls:
        ...rest of your code

このコードはテストされておらず、より良い解決策が見つかるでしょう。これは、同時にあまりにも多くのリンクを開こうとしているだけであり、メモリが消費されていることを証明するはずです。

于 2012-09-12T10:42:19.383 に答える