Python URLRetrieve límite de velocidad y Reanudar descarga parcial
-
13-10-2019 - |
Pregunta
Estoy utilizando el código de este hilo limitar mi descarga Velocidad.
¿Cómo incorporo descargas parciales de reanudar con la tasa de código que limita? Los ejemplos que he encontrado uso en lugar de urlopen
urlretrieve
, y la clase RateLimit
depende de urlretrieve
.
Me gustaría tener una función externa que controla la descarga parcial, sin tener que cambiar la clase RateLimit
:
from throttle import TokenBucket, RateLimit
def retrieve_limit_rate(url, filename, rate_limit):
"""Fetch the contents of urls"""
bucket = TokenBucket(10*rate_limit, rate_limit)
print "rate limit = %.1f kB/s" % (rate_limit,)
print 'Downloading %s...' % filename
rate_limiter = RateLimit(bucket, filename)
#
# What do I put here to allow resuming files?
#
return urllib.urlretrieve(url, filename, rate_limiter)
Solución
Puede ser capaz de utilizar pycurl lugar:
def curl_progress(total, existing, upload_t, upload_d):
try:
frac = float(existing)/float(total)
except:
frac = 0
print "Downloaded %d/%d (%0.2f%%)" % (existing, total, frac)
def curl_limit_rate(url, filename, rate_limit):
"""Rate limit in bytes"""
import pycurl
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.MAX_RECV_SPEED_LARGE, rate_limit)
if os.path.exists(filename):
file_id = open(filename, "ab")
c.setopt(c.RESUME_FROM, os.path.getsize(filename))
else:
file_id = open(filename, "wb")
c.setopt(c.WRITEDATA, file_id)
c.setopt(c.NOPROGRESS, 0)
c.setopt(c.PROGRESSFUNCTION, curl_progress)
c.perform()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow