我使用下面的代码来压缩大约1G的文件夹。完成时间超过 30秒
import tarfile
import tempfile
# tar the folder
tmp_path = 'my_folder'
f_temp = tempfile.NamedTemporaryFile()
src_fname = f_temp.name
with tarfile.open(src_fname, "w") as tar:
tar.add(tmp_path, arcname='.')
但是,如果我在终端中使用tar cf my_folder
,则只需要一秒钟多一点。
如果我使用普通文件,则python脚本也将花费不到2秒的时间。
import tarfile
# tar the folder
tmp_path = 'my_folder'
src_fname = 'nos.tar'
with tarfile.open(src_fname, "w") as tar:
tar.add(tmp_path, arcname='.')
为什么速度如此不同?就我而言,临时文件和nos.tar
都写入同一设备/dev/sda1
。该计算机是n1-standard-4/nvidia-tesla-v100/1
中的Google云us-central1-a
实例。
此速度下降似乎与gcloud实例有关。我在本地计算机上尝试了上述3种方法,即
tar cf nos.tar my_folder
tempfile.NamedTemporaryFile()
它们都在2秒内完成。第二种方法比第一种方法慢约0.4秒,而第三种方法比第一种方法慢约0.4秒,这在the other stackoverflow post中已提到。
在gcloud实例上,tempfile.NamedTemporaryFile()
在/tmp
中,我将常规文件写入了/scratch
。
nos@instance:/scratch$ df -h /scratch/
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 31G 2.2G 29G 7% /
nos@instance:/scratch$ df -h /tmp/
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 31G 2.2G 29G 8% /
两个都指向同一个设备,但是速度似乎表示不同的设备。