Creates a single big volume with random files added
+Results on my devel box:
+~0.055s/MB --> ~1 minute per GB
+compress ratio ~1.15
+adding encryption had no noticeable effect
+switching mode between w|gz or w#gz had no noticeable effect
+switching to bzip2 reduced speed to ~0.174s/MB, compression ratio approx. equal
+
.. codeauthor:: Intra2net <info@intra2net.com>
"""
-from tempfile import NamedTemporaryFile
+from tempfile import mkstemp
from time import perf_counter
import os
from test_multivol_compression_sizes import find_random_files
+
def main():
""" Main function, called when running file as script
open_time = add_time = close_time = 0.0
n_files_added = 0
- with NamedTemporaryFile(prefix='deltatar_multivol_cmp_tst_',
- suffix=suffix, delete=True) as file_obj:
- file_obj.close()
- result_file_name = file_obj.name
+ result_file_name = None
+ file_handle = None
+ try:
+ # create temp file
+ file_handle, result_file_name = mkstemp(
+ prefix='deltatar_multivol_cmp_tst_', suffix=suffix)
+ os.close(file_handle)
+ file_handle = None
+
print('opening temp file ' + result_file_name)
start = perf_counter()
- tarobj = TarFile.open(result_file_name, mode=mode)
+ tarobj = TarFile.open(result_file_name, mode=mode, password='test1234')
end = perf_counter()
open_time = end - start
- for add_file_name in find_random_files():
+ for add_file_name in find_random_files(min_size):
# check file
if add_file_name.startswith(result_file_name[:-6]):
continue # do not accidentally add self
result_size = os.stat(result_file_name).st_size
- # summarize
- print('time to open/close the tar file: {:.3f} / {:.3f}ms'
- .format(open_time*1000., close_time*1000.))
- print('time to add {} files: {:.3f}s (avg {:.3f}ms per file)'
- .format(n_files_added, add_time, add_time / n_files_added * 1000.))
- print('average added file size: {:.3f}KB'
- .format(size_added/n_files_added/1000.))
- print('time to add per MB: {:.3f}s'.format(add_time/size_added*1.0e6))
- print('size of result file: {} --> compression ratio {:.1f}'
- .format(result_size, size_added/result_size))
+ # summarize
+ print('time to open/close the tar file: {:.3f} / {:.3f}ms'
+ .format(open_time*1000., close_time*1000.))
+ print('time to add {} files: {:.3f}s (avg {:.3f}ms per file)'
+ .format(n_files_added, add_time, add_time / n_files_added * 1000.))
+ print('average added file size: {:.3f}KB'
+ .format(size_added/n_files_added/1000.))
+ print('time to add per MB: {:.3f}s'.format(add_time/size_added*1.0e6))
+ print('size of result file: {} --> compression ratio {:.2f}'
+ .format(result_size, size_added/result_size))
+
+ finally:
+ if file_handle:
+ os.close(file_handle)
+ if result_file_name:
+ # del temp file
+ os.unlink(result_file_name)
if __name__ == '__main__':