Question

J'utilise le code de ce fil pour limiter mon téléchargement taux.

Comment puis-je intégrer le téléchargement partiel reprendre avec le taux de limitation du code? Les exemples que j'ai trouvé une utilisation urlopen au lieu de urlretrieve, et la classe RateLimit dépend urlretrieve.

J'aimerais avoir une fonction externe qui contrôle le téléchargement partiel, sans avoir à changer la classe 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)
Était-ce utile?

La solution

Peut être en mesure d'utiliser à la place pycurl:

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top