import requests import datetime import model import config # file_size if byte # longest_time seconds def download_file(chunk_size=4 * 1024, file_size=100 * 1024 * 1024, longest_time=60): execution_datetime=datetime.datetime.now() print("Download at {time}".format(time=execution_datetime)) servers = config.get_servers() for server_name in servers: server = servers[server_name] url = server["url"] server_name = server["name"] chunk_read = 0 s_time = datetime.datetime.now() print('start time:{s_time}'.format(s_time=s_time)) duration = longest_time try: with requests.get(url, stream=True, timeout=longest_time) as r: for chunk in r.iter_content(chunk_size): if chunk: chunk_read += len(chunk) e_time = datetime.datetime.now() duration = (e_time - s_time).total_seconds() if chunk_read >= file_size: break if duration >= longest_time: print( "{server} longer than {longest_time} seconds. Stopped.".format( longest_time=longest_time, server=server_name ) ) break print('end time:{e_time}'.format(e_time=e_time)) speed = chunk_read / duration / 1024 / 1024 * 8 # mega bit model.add_record(execution_datetime,server_name, speed) print("{server}:{speed} Mbit/s".format(server=server_name, speed=speed)) except requests.exceptions.Timeout as e: print( "timeout before wait {timeout} seconds. Error:{err}".format( err=str(e), timeout=longest_time ) )