python3 NamedTemporaryFile的写入速度比gcloud实例上的普通文件慢得多

时间:2019-03-21 14:49:49

标签: python-3.x gcloud temporary-files

我使用下面的代码来压缩大约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% /

两个都指向同一个设备,但是速度似乎表示不同的设备。

0 个答案:

没有答案