2011-03-10 17 views
6

SQL dökümlerinin arşivlerini oluşturmam gereken bellek kısıtlı bir ortamda çalışıyorum. Python'u tarfile module'da yerleşik olarak kullanırsam bellekte tutulan veya oluşturulduğu diske yazılan '.tar' dosyası mı?Python'un `tarfile` modülü, bellekte oluşturduğu arşivleri saklıyor mu?

Örneğin, aşağıdaki kodda, huge_file.sql 2GB ise tar değişkeni 2GB bellekte mi kalıyor?

import tarfile 

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

cevap

5

Hayır bellekte bunu yüklenmiyor. Bunu dosyadan tarball kopyalamak sabit boyutlu tampon kullanıyor, hangi copyfileobj kullanıyor olduğunu görmek için source for tarfile okuyabilir:

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 
+0

+1 kaynağına bağlantı için. Geliştirme dokümanlarının şu anda http://docs.python.org/dev/library/tarfile kaynaklarına bir bağlantısı var. – jfs