因此,我正在编写一个脚本,用于将大型文件服务器(目录)备份到多个 FTP 帐户/服务/任何东西(目前可怜的秘书有一个复制和粘贴文件到这样做,但无论如何我已经接近有一个工作脚本来将她从那个=D中拯救出来)。
我之前并没有真正搞乱线程或多处理,但我不知道如何让它获取文件列表并一次将它们全部上传到主机 3-5(在这个例子中,我'正在尝试 5,但我不知道我会决定什么)。
import os, sys, subprocess, shutil, re, string, glob, tvdb_api, itertools, multiprocessing, ftplib
files = [os.path.join(r, f) for r, d, fs in os.walk(os.getcwd()) for f in fs if not f[0]=='.']
class FTP_Upload:
def __init__(self, p=os.getcwd()):
self.files_to_upload = sorted([f for f in files if os.path.split(f)[0] == p])
self.target = raw_input("Enter the host you want to upload to: ")
self.host = FTP('ftp.host1.com', 'user_name1', 'super_secret_password1') if self.target == 'host' else FTP('ftp.host2.com', 'user_name2', 'secret_password2') if self.target == 'host2' else None
def upload_files(self, f):
self.host.storbinary(('STOR /'+f.split('/')[-1]), open(f, 'rb'))
def multiupload(self):
p = multiprocessing.Pool(processes=5)
p.map(self.upload_files(f), self.files_to_upload)
FTP_Upload().multiupload()
但这只是上传 self.files_to_upload 中的最后一个文件...
我试着让文件列表成为可迭代的
self.files_to_upload = iter(sorted([f for f in files if os.path.split(f)[0] == p]))
但没有喜悦。
提前感谢您的帮助!