python3 NamedTeoraryFile намного медленнее для записи, чем обычный файл в экземпляре gcloud - PullRequest
0 голосов
/ 21 марта 2019

Я использовал код ниже, чтобы смолить папку около 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.Компьютер является экземпляром Google Cloud n1-standard-4/nvidia-tesla-v100/1 в us-central1-a.

Это замедление, по-видимому, связано с экземпляром gcloud.Я попробовал вышеупомянутые 3 метода на своем локальном компьютере, то есть

  • tar cf nos.tar my_folder
  • использовать обычный файл
  • использовать tempfile.NamedTemporaryFile()

Все они заканчивают в течение 2 секунд.Второй метод работает медленнее, чем первый, примерно на 0,4 секунды, а третий - медленнее, чем первый, примерно на 0,4 секунды, что упоминается в в другом сообщении, посвященном стеку .

На экземпляре 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% /

Оба указывают на одно и то же устройство, но скорость, кажется, указывает на разные устройства.

...