3GBのXMLファイルを処理しようとしていて、ファイルを読み込んで辞書にデータを格納するループの途中でmemoryerrorを取得しています。大きな辞書を作成するPython memoryerror
class Node(object):
def __init__(self, osmid, latitude, longitude):
self.osmid = int(osmid)
self.latitude = float(latitude)
self.longitude = float(longitude)
self.count = 0
context = cElementTree.iterparse(raw_osm_file, events=("start", "end"))
context = iter(context)
event, root = context.next()
for event, elem in context:
if event == "end" and elem.tag == "node":
lat = float(elem.get('lat'))
lon = float(elem.get('lon'))
osm_id = int(elem.get('id'))
nodes[osm_id] = Node(osm_id, lat, lon)
root.clear()
私は反復的な解析方法を使用しているため、ファイルを読むことに問題はありません。私はちょうど後で処理するために辞書にデータを保存したいのですが、辞書が大きくなりすぎているようです。プログラムの後半で私はリンクを読み込み、リンクによって参照されるノードがノードの最初のバッチにあったかどうかをチェックする必要があります。そのため、それらを辞書に格納しています。
どのようにすれば、メモリフットプリントを大幅に減らすことができますか(スクリプトは仕上げに近づいていないので、ビットとピースを削っても効果がありません)、またはPythonで使用できるメモリの量を大幅に増やすことができますか? Pythonのようなメモリ使用状況を監視すると、約1950 MBになってしまい、コンピュータにはまだ約6 GBのRAMがあります。
64ビットPythonを実行していますか? –
ああシュート、私は思ったが、ちょうどチェックして、私は実際に32を使用している。それは32とメモリ使用量にハードキャップがありますが、64ではなく、私の理解ですよね? – wmebane
64ビットのハード・キャップもありますが、テラバイトの倍数なので、ヒットする可能性は非常に低いです。 –