Descargar 100 archivos simultaneamente...

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
kemazonico
Aprendiz de Mago
Mensajes: 29
Registrado: 26 May 2007, 19:25

Descargar 100 archivos simultaneamente...

Mensaje por kemazonico »

¿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
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Descargar 100 archivos simultaneamente...

Mensaje por Dany »

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
kemazonico
Aprendiz de Mago
Mensajes: 29
Registrado: 26 May 2007, 19:25

Re: Descargar 100 archivos simultaneamente...

Mensaje por kemazonico »

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!!
Responder