Я правильно распараллеливаю эту передачу файлов? - PullRequest
0 голосов
/ 20 сентября 2019

У меня много «маленьких» файлов, которые я хочу скопировать с одного сервера (смонтированного с помощью sshfs) на мой локальный компьютер.

Использование stfp get или ssh, cp передает только один файл за раз, поэтому у меня огромные накладные расходы, и это занимает вечность.

Я хотел запустить несколько процессов копирования одновременно, чтобы попытаться ускорить процесс.Я не смог сделать это с помощью bash, так что это была моя попытка на Python, использующая многопроцессорную обработку для запуска 30 параллельных, непересекающихся процессов копирования:

import multiprocessing        
from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool   
import os
import shutil

def copytree(src, dst, symlinks=False, ignore=None):
    if not os.path.exists(dst):
        os.makedirs(dst)
    for item in os.listdir(src):
        s = os.path.join(src, item)
        d = os.path.join(dst, item)

        if not os.path.exists(d) or os.stat(s).st_mtime - os.stat(d).st_mtime > 1:
            shutil.copy2(s, d)



list_of_folders = os.listdir('source/of/folders')          


# PARALLELIZATION INTO 30 PROCESSES:

pool = Pool(30)
pool.map(copytree, list_of_folders, chunksize=250)
pool.close()
pool.join()    

Однако, похоже, это так же медленно, каккопирование по порядку.Проверка на htop для большинства процессоров не кажется активной, а общая скорость передачи файлов составляет около 10 МБ / с ...

Почему это не работает, как ожидалось?Как этого достичь?

...