1. import os     
  2. import sys     
  3. import urllib     
  4. from time import time, sleep     
  5.     
  6. class RateLimit(object):     
  7.     """Rate limit a url fetch"""     
  8.     def __init__(self, rate_limit):     
  9.         """rate limit in kBytes / second"""     
  10.         self.rate_limit = rate_limit     
  11.         self.start = time()     
  12.     def __call__(self, block_count, block_size, total_size):     
  13.         total_kb = total_size / 1024     
  14.         downloaded_kb = (block_count * block_size) / 1024     
  15.         elapsed_time = time() - self.start     
  16.         if elapsed_time != 0:     
  17.             #实际下载速度    
  18.             rate = downloaded_kb / elapsed_time     
  19.             print "%d kb of %d kb downloaded %f.1 kBytes/s\n" % (downloaded_kb ,total_kb, rate),     
  20.             expected_time = downloaded_kb / self.rate_limit     
  21.             sleep_time = expected_time - elapsed_time     
  22.             print "Sleep for", sleep_time     
  23.             #等待时间    
  24.             if sleep_time > 0:     
  25.                 sleep(sleep_time)