Usando ftplib para la carga de multiproceso
-
23-09-2019 - |
Pregunta
Estoy tratando de hacer subidas multiproceso, pero obtener errores. Supuse que tal vez sea imposible utilizar multithreads con ftplib?
Aquí viene mi código:
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()
Obtener montón de errores ftplib como
aumento error_reply, resp error_reply: 200 Tipo conjunto de I
Si trato de subir uno por uno, todo funciona bien
Solución
¿Usted ha intentado poner el código de conexión en el interior del hilo?
En otras palabras, hacer que cada hilo de hacer su propia conexión independiente con FTP.host () y FTP.login (). El servidor no como múltiples archivos al mismo tiempo en una única conexión, ya que puede ser parseando comandos uno a la vez y no puede manejar una segunda carga o comando "STOR". Pero si se puede hacer múltiples conexiones desde la misma dirección IP, tendrá sesión separada en la que se dé la orden 'STOR'.
Este es un ejemplo:
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()
A ver si eso se comporta mejor.
P.S. No estoy seguro si todos mis pestañas están alineadas.