example - python 3.6 ftp
¿Impide que ftplib descargue un archivo en progreso? (4)
Tenemos una configuración de sistema ftp para monitorear / descargar desde servidores FTP remotos que no están bajo nuestro control. La secuencia de comandos se conecta al ftp remoto, y toma los nombres de archivo de los archivos en el servidor, luego verificamos si es algo que ya se ha descargado. Si no se ha descargado, descargamos el archivo y lo agregamos a la lista.
Recientemente nos encontramos con un problema, en el que alguien del lado de ftp remoto, copiará en un archivo único masivo (> 1GB), luego el script se activará, verá un archivo nuevo y comenzará a descargar el archivo en el que se está copiando.
¿Cuál es la mejor manera de verificar esto? Estaba pensando en tomar el tamaño del archivo esperando unos segundos para verificar nuevamente el tamaño del archivo y ver si se ha incrementado, si no lo ha hecho entonces lo descargamos. Pero dado que el tiempo es motivo de preocupación, no podemos esperar unos segundos para cada conjunto de archivos y ver si ha aumentado el tamaño del archivo.
¿Cuál sería la mejor manera de hacerlo, actualmente todo se hace a través de pythons ftplib, cómo podemos hacer esto aparte de utilizar el método mencionado anteriormente.
Una vez más, permítanme reiterar esto, tenemos 0 control sobre los sitios ftp remotos.
Gracias.
ACTUALIZACIÓN1:
Estaba pensando qué pasaría si intenté cambiarle el nombre ... ya que tenemos permisos completos en el ftp, si la carga del archivo está en progreso, ¿fallará el comando de cambio de nombre?
No tenemos ninguna opción real aquí ... ¿verdad?
ACTUALIZACIÓN2: Bueno, aquí hay algo interesante, algunos de los ftps que probamos parecen asignar automáticamente el espacio una vez que comienza la transferencia.
Por ejemplo, si transfiero un archivo de 200 MB al servidor ftp. Mientras que la transferencia está activa si me conecto al servidor ftp y hago un tamaño mientras se realiza la carga. Muestra 200mb para el tamaño. Aunque el archivo solo tiene un 10% de compleción.
Los permisos también parecen configurarse aleatoriamente. El servidor FTP que viene con IIS establece los permisos una vez que el archivo ha terminado de copiarse. Mientras que algunos de los otros servidores FTP anteriores lo configuran tan pronto como envía el archivo.
: ''(
Como dice que tiene 0 control sobre los servidores y no puede hacer que sus clientes publiquen archivos desencadenantes como lo sugiere S. Lott, debe lidiar con la solución imperfecta y arriesgarse a la transmisión incompleta de archivos, tal vez esperando un tiempo y comparando tamaños de archivos antes y después de.
Puede intentar cambiar el nombre tal como lo sugirió, pero como tiene 0 control no puede estar seguro de que ftp-server-administrator (o su sucesor) no cambie plataformas o servidores ftp o restrinja sus permisos.
Lo siento.
No puede saber cuándo se realiza la copia del sistema operativo. Podría ralentizar o esperar.
Para una certeza absoluta, realmente necesitas dos archivos.
- El archivo masivo.
- Y un pequeño archivo de activación.
Pueden meterse con el archivo masivo todo lo que quieran. Pero cuando tocan el archivo de activación, estás descargando ambos.
Si no puede obtener un activador, debe equilibrar el tiempo requerido para sondear con el tiempo requerido para descargar.
Hacer esto.
Obtener una lista Compruebe las marcas de tiempo.
Verifique los tamaños frente al tamaño anterior del archivo. Si el tamaño ni siquiera está cerca, se está copiando en este momento. Espere; bucle en este paso hasta que el tamaño esté cerca del tamaño anterior.
Mientras no hayas terminado:
a. Obtener el archivo
segundo. Obtener una lista OTRA VEZ. Verifique el tamaño de la nueva lista, listado anterior y su archivo. Si están de acuerdo: ya terminaste. Si no están de acuerdo: el archivo cambió mientras descargaba; no has terminado.
Si tiene varios archivos, puede obtener la lista de todos los tamaños a la vez, esperar diez segundos y ver cuáles son los mismos. Cualquiera que siga siendo el mismo debe ser seguro para descargar.
"¡Malditos los torpedos! ¡Máxima velocidad adelante!"
Solo descarga el archivo. Si es un archivo grande, luego de que la descarga finalice, espere el tiempo que sea razonable para su escenario y continúe la descarga desde el punto en que se detuvo. Repita hasta que no haya más cosas para descargar.