把ModelScope的文件下载模块好好改改吧,现在没几个模型能成功下载!
经过进一步的代码调试,发现 模型文件下载基本都会进入parallel_download下载逻辑,也就是并行下载,默认的并行度(线程数是4)。
parallel_download源码的基本实现逻辑就是构造了一个线程池,然后调用download_part_with_retry方法去下载文件。
而download_part_with_retry方法里面也有一个无限循环(类似于http_get_file方法),代码片段如下:
#
retry = Retry( total=API_FILE_DOWNLOAD_RETRY_TIMES, backoff_factor=1, allowed_methods=['GET'])
接下来就是无限循环的代码逻辑,问题就出在这,既然下载过程是无限循环(退出循环的唯一条件是文件下载完毕),为什么还要在代码里加一段最大重试次数的限制???
什么垃圾代码 ???
while True: try: with open(file_name, 'rb+') as f: f.seek(start) print('URL:',url) r = requests.get( url, stream=True, headers=get_headers, cookies=cookies, timeout=API_FILE_DOWNLOAD_TIMEOUT) for chunk in r.iter_content( chunk_size=API_FILE_DOWNLOAD_CHUNK_SIZE): if chunk: # filter out keep-alive new chunks f.write(chunk) progress.update(end - start) break except (Exception) as e: # no matter what exception, we will retry. retry = retry.increment('GET', url, error=e) logger.warning('Downloading: %s failed, reason: %s will retry' % (model_file_name, e)) retry.sleep()
赞4
踩1