1

このスニペットは、すべてのドキュメントをデータベースから取り出し、gzip圧縮されたファイルにダンプします。docs_to_dumpは、ダンプされるすべてのテキストドキュメントを含むdjangoオブジェクトです。

os.chdir(dump_dir)
filename = 'latest-' + court_id + '.xml.gz.part'
with myGzipFile(filename, mode='wb') as z_file:
    z_file.write('<?xml version="1.0" encoding="utf-8"?>\n<opinions dumpdate="' + str(date.today()) + '">\n')

    for doc in docs_to_dump:
        row = etree.Element("opinion",
            dateFiled           = str(doc.dateFiled),
            precedentialStatus  = doc.documentType,
            local_path          = str(doc.local_path),
            time_retrieved      = str(doc.time_retrieved),
            download_URL        = doc.download_URL,
            caseNumber          = doc.citation.caseNumber,
            caseNameShort       = doc.citation.caseNameShort,
            court               = doc.court.get_courtUUID_display(),
            sha1                = doc.documentSHA1,
            source              = doc.get_source_display(),
            id                  = str(doc.documentUUID),
        )
        if doc.documentHTML != '':
            row.text = doc.documentHTML
        else:
            row.text = doc.documentPlainText.translate(null_map)
        z_file.write('  ' + etree.tostring(row).encode('utf-8') + '\n')

    # Close things off
    z_file.write('</opinions>')

残念ながら、それはまた、OSがそれを破壊するほど多くのメモリを消費します。「ファイルのようなオブジェクト」に書き込むことで、圧縮されたファイルがその場で作成され、メモリが比較的少なくなると思いました。代わりに、数百MBを消費し、その後クラッシュします。

私は圧縮の専門家ではありませんが、圧縮ファイル全体がメモリに保存されているように感じます。

私がこれを行うべきより良い方法はありますか?

編集-ファイル全体はここにあります:https ://bitbucket.org/mlissner/search-and-awareness-platform-courtlistener/src/2ca68efd8017/data-dumps/data-dumper.py

4

1 に答える 1

2

アンドレフスキーは正しいかもしれないと思います。クラッシュしている場合は、イテレータメソッドを使用するようにクエリを調整してみてください

何かのようなもの。

docs_to_dump = Document.objects.all().order_by('court').iterator()

クエリセット全体をメモリにロードしないようにする必要があります。

于 2011-05-23T04:11:32.563 に答える