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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top