Descargar 100 archivos simultaneamente...

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.

Descargar 100 archivos simultaneamente...

Notapor kemazonico » 19 Mar 2017, 22:11

¿Hay manera de descargar simultaneamente una gran cantidad de archivos (unos 100) de aprox 4096 bytes y que no tarde tanto tiempo?, he intentado descargarlos de manera "normal" (uno a la vez) pero el tiempo de descarga de unos 10 archivos no es muy corto. ya que el servidor no responde tan rapido, tambien he intentado descargarlos todos simultaneamente (como se muestra en el código) pensando que seria más rapido y si, en efecto es mucho más rapido y he podido descargar unos 50 archivos en apenas 25 segundos...

Sin embargo, como se daran cuenta estoy usando una pausa de 25 segundos al final del loop para darle tiempo a que todos los archivos se descarguen y como requiero optimizar al máximo el tiempo consumido desconozco como corroborar si los archivos ya se han descargado antes del tiempo previsto y no tener que depender de la suerte.

Otra duda que tengo es como ponerle un "timeout" a la descarga y que por ejemplo si un archivo sobrepasa cierto tiempo en poder conectar, omita este y continue con el resto, ya saben, por cuestiones de reducir los tiempos.

Espero me puedan orientar, quiza estoy usando un metodo incorrecto.



Código: Seleccionar todo
$canArray = IniReadSectionNames("C:\xampp\htdocs\iptv\canales.ini") ;;; Este ini contiene el listado de los 100 archivos cada uno contendra 3 distintos links por si uno falla

    If Not @error Then

        For $can = 1 To $canArray[0]

      $urlArray = IniReadSection ("C:\xampp\htdocs\iptv\canales.ini", $canArray[$can] )

      $url1 = IniRead ("C:\xampp\htdocs\iptv\canales.ini", $canArray[$can], "URL1", "")
      ConsoleWrite ($url1 & @CRLF)

      InetGet ($url1, "C:\xampp\htdocs\iptv\" & $canArray[$can] & "_tmp.m3u8", 1, 1)

      Sleep(500)
        Next

      Sleep (25000) ;; Esta es la pausa, sin embargo esto no me es muy funcional..

    EndIf
kemazonico
 
Mensajes: 26
Registrado: 26 May 2007, 19:25

Re: Descargar 100 archivos simultaneamente...

Notapor Dany » 23 Mar 2017, 06:49

Hola. Puedes hacer algo asi para dercargar simultaneamente varios archivos.


Código: Seleccionar todo
#include <InetConstants.au3>


Local Const $sDownloadFolder = @ScriptDir & '\Download\'
DirRemove($sDownloadFolder)
DirCreate($sDownloadFolder)

Local Const $sDownloadUrl = 'https://upload.wikimedia.org/wikipedia/commons/3/39/50_fenig%C3%B3w_ubt.jpeg'


Local $aDownload[40]
For $i = 0 To UBound($aDownload) - 1
   $aDownload[$i] = InetGet($sDownloadUrl, $sDownloadFolder & "Image-" & String($i + 1) & ".jpeg", $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
Next

Local $iDownloadOKs = 0
Local $iError = False
Local $iCompleted = False
While Sleep(30)

   For $i = 0 To UBound($aDownload) - 1
      $iCompleted = InetGetInfo($aDownload[$i], $INET_DOWNLOADCOMPLETE)
      $iError = InetGetInfo($aDownload[$i], $INET_DOWNLOADERROR)
      If $iCompleted Then
         ConsoleWrite("+Download OK. File: " & "Image-" & String($i + 1) & ".jpeg" & @CRLF)
         InetClose($aDownload[$i])
         $iDownloadOKs += 1
      EndIf

      If $iError Then
         ConsoleWrite("!Download FAIL. File: " & "Image-" & String($i + 1) & ".jpeg" & @CRLF)
         InetClose($aDownload[$i])
         $iDownloadOKs += 1
      EndIf

   Next
   If $iDownloadOKs = UBound($aDownload) Then ExitLoop
WEnd

ConsoleWrite("+Donwloads Finished..." & @CRLF)







Saludos :smt027
    ............................................Imagen
    ......................................Imagen
Avatar de Usuario
Dany
Profesional del Autoit
 
Mensajes: 635
Registrado: 28 Mar 2012, 22:49

Re: Descargar 100 archivos simultaneamente...

Notapor kemazonico » 29 Mar 2017, 00:57

Muchas gracias por la ayuda, me sirvio muho..
Lamentablemente decidi cambiar de estrategia ya que aún con este ultimo metodo la descarga es tardada ya que el servidor genera esos archivos via PHP y no esta optimizado para poder servir tantas peticiones, sin embargo tu metodo me sirve para otros propósitos.

Gracias!!
kemazonico
 
Mensajes: 26
Registrado: 26 May 2007, 19:25


Volver a Soporte (Ayuda >Hacker)

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron