6

SQLダンプのアーカイブを作成する必要があるメモリに制約のある環境で作業しています。Pythonの組み込みtarfileモジュールを使用する場合、「。tar」ファイルはメモリに保持されているか、作成時にディスクに書き込まれますか?

たとえば、次のコードでhuge_file.sqlは、2GBの場合、tar変数はメモリで2GBを占有しますか?

import tarfile

tar = tarfile.open("my_archive.tar.gz")), "w|gz")
tar.add('huge_file.sql')
tar.close()
4

1 に答える 1

5

いいえ、メモリにロードされていません。tarfileのソースを読み取ってcopyfileobj、ファイルからtarballにコピーするために固定サイズのバッファーを使用しているを使用していることを確認できます。

def copyfileobj(src, dst, length=None):
    """Copy length bytes from fileobj src to fileobj dst.
       If length is None, copy the entire content.
    """
    if length == 0:
        return
    if length is None:
        shutil.copyfileobj(src, dst)
        return

    BUFSIZE = 16 * 1024
    blocks, remainder = divmod(length, BUFSIZE)
    for b in xrange(blocks):
        buf = src.read(BUFSIZE)
        if len(buf) < BUFSIZE:
            raise IOError("end of file reached")
        dst.write(buf)

    if remainder != 0:
        buf = src.read(remainder)
        if len(buf) < remainder:
            raise IOError("end of file reached")
        dst.write(buf)
    return
于 2011-03-10T19:31:08.187 に答える