2011-03-10 44 views
6

Tôi đang làm việc trong môi trường bị hạn chế về bộ nhớ, nơi tôi cần tạo lưu trữ các bãi chứa SQL. Nếu tôi sử dụng python được xây dựng trong tarfile module là '.tar' tập tin được tổ chức trong bộ nhớ hoặc ghi vào đĩa khi nó được tạo ra?Mô-đun `tarfile` của Python có lưu trữ các kho lưu trữ được xây dựng trong bộ nhớ không?

Ví dụ: trong mã sau, nếu huge_file.sql là 2GB thì biến số tar có chiếm 2GB bộ nhớ không?

import tarfile 

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

Trả lời

5

Không tải nó trong bộ nhớ. Bạn có thể đọc source for tarfile để thấy rằng nó sử dụng copyfileobj, đó là sử dụng một bộ đệm kích thước cố định để sao chép từ các tập tin vào 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 
+0

+1 để liên kết với nguồn. Tài liệu phát triển hiện cũng có liên kết đến các nguồn http://docs.python.org/dev/library/tarfile – jfs

Các vấn đề liên quan