shutil
предоставляет один из простейших способов копирования файлов / папок из каталога в другой.
Простой способ сделать это:
# Source path
src = r'D:\source_path'
# Destination path
dest = r'C:\destination_path\new_folder'
# Copy the content of source to destination
destination = shutil.copytree(src, dest)
Проблема с выше он копирует каждый отдельный файл один за другим. И для каталога, содержащего тысячу файлов, и не говоря уже об одном на удаленном сервере, это становится трудным и требует много времени.
Реализация multiprocessing
для этой задачи решит много боли и времени. Мне известно о базовом c использовании функций многопроцессорности, но я не знаю, как действовать дальше. Я бы подумал начать так:
import multiprocessing
import os
def copy_instance():
# printing process id
destination = shutil.copytree(src, dest)
if __name__ == "__main__":
# printing main program process id
print("ID of main process: {}".format(os.getpid()))
# creating processes
p1 = multiprocessing.Process(target=copy_instance)
# starting processes
p1.start()
Но это ничего не решает в смысле применения каждого файла как отдельного прогона. Любая помощь, предложения или ссылки будут полезны.
Изменить: Также пробовал это, но не смог заставить его работать. Любое предложение.
import multiprocessing
import os
import shutil
def copy_instance(list):
dest = r'C:\destination_path\new_folder'
destination = shutil.copytree(list, dest)
return destination
if __name__ == "__main__":
# input list
sec = r"D:\source_path"
source = os.listdir(sec)
list=[]
for ith in range(len(source)):
list.append(str(sec) + "\\" + str(source[ith]))
# creating a pool object
p = multiprocessing.Pool()
# map list to target function
result = p.map(copy_instance, list)
print(result)