Question

Je suis en train de faire les téléchargements multithread, mais obtenir des erreurs. Je devinai que peut-être il est impossible d'utiliser multithreads avec ftplib?

vient ici mon 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()

Obtenir tas d'erreurs de ftplib comme

élever error_reply, resp error_reply: 200 Type réglé sur I

Si je tente de télécharger un par un, tout fonctionne bien

Était-ce utile?

La solution

Avez-vous essayé de mettre le code de connexion à l'intérieur du fil?

En d'autres termes, faire de chaque fil font de leur propre connexion séparée avec FTP.host () et FTP.login (). Le serveur peut ne pas aimer les téléchargements multiples en même temps sur une seule connexion, car il peut être un à commandes analyse pas de temps et ne peut pas gérer un second téléchargement ou commande « STOR ». Mais si vous pouvez faire plusieurs connexions à partir de la même adresse IP, vous aurez session séparée sur laquelle lancer la commande « STOR ».

Voici un exemple:

    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()

Voir si cela se comporte mieux.

P.S. Je ne sais pas si tous mes onglets sont alignés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top