それで、私はファイルの大規模なサーバー(のディレクトリ)を多数の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]))
しかし、喜びはありません。
助けてくれてありがとう!