У меня много «маленьких» файлов, которые я хочу скопировать с одного сервера (смонтированного с помощью 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 МБ / с ...
Почему это не работает, как ожидалось?Как этого достичь?