Mit ftplib für Multi-Thread-Uploads
-
23-09-2019 - |
Frage
Ich versuche, Multi-Thread-Uploads zu tun, aber Fehler zu bekommen. Ich vermuten, dass vielleicht ist es unmöglich, mit Multithreads ftplib zu benutzen?
Hier kommt meinen Code:
class myThread (threading.Thread):
def __init__(self, threadID, src, counter, image_name):
self.threadID = threadID
self.src = src
self.counter = counter
self.image_name = image_name
threading.Thread.__init__(self)
def run(self):
uploadFile(self.src, self.image_name)
def uploadFile(src, image_name):
f = open(src, "rb")
ftp.storbinary('STOR ' + image_name, f)
f.close()
ftp = FTP('host') # connect to host, default port
ftp.login() # user anonymous, passwd anonymous@
dirname = "/home/folder/"
i = 1
threads = []
for image in os.listdir(dirname):
if os.path.isfile(dirname + image):
thread = myThread(i , dirname + image, i, image )
thread.start()
threads.append( thread )
i += 1
for t in threads:
t.join()
Get Bündel von ftplib Fehler wie
raise error_reply bzw. error_reply: 200 Set I
Wenn ich versuche, einen nach dem anderen zu laden, funktioniert alles einwandfrei
Lösung
Haben Sie den Verbindungscode in dem Thread zu setzen versucht?
Mit anderen Worten, macht jeden Thread mit FTP.host jeweils einem eigenen Verbindung tun () und FTP.login (). Der Server kann nicht wie mehrere Uploads gleichzeitig auf einer einzigen Verbindung, weil sie Befehle einer nach dem anderen kann das Parsen und kann kein zweites Upload oder „STOR“ -Befehl behandeln. Aber wenn Sie mehrere Verbindungen von derselben IP-Adresse tun können, werden Sie separate Sitzung haben, auf denen den ‚STOR‘ Befehl zu erteilen.
Hier ist ein Beispiel:
class myThread (threading.Thread):
def __init__(self, threadID, src, counter, image_name):
###############
#Add ftp connection here!
self.ftp = FTP('host') # connect to host, default port
self.ftp.login() # user anonymous, passwd anonymous@
################
self.threadID = threadID
self.src = src
self.counter = counter
self.image_name = image_name
threading.Thread.__init__(self)
def run(self):
uploadFile(self.src, self.image_name)
def uploadFile(src, image_name):
f = open(src, "rb")
self.ftp.storbinary('STOR ' + image_name, f)
f.close()
dirname = "/home/folder/"
i = 1
threads = []
for image in os.listdir(dirname):
if os.path.isfile(dirname + image):
thread = myThread(i , dirname + image, i, image )
thread.start()
threads.append( thread )
i += 1
for t in threads:
t.join()
sehen, ob das benimmt sich besser.
P. S. Nicht sicher, ob alle meine Registerkarten ausgerichtet sind.