0

如何在 Google Drive API Python 中显示下载速度

我想修改它以显示下载速度

def download_file(id):
    fileStats=file_info(id)
    # showing the file stats
    print("----------------------------")
    print("FileName: ",fileStats['name'])
    print("FileSize: ",convert_size(int(fileStats['size'])))
    print("----------------------------")

    request = service.files().get_media(fileId=id)
    fh = io.BytesIO()
    downloader = MediaIoBaseDownload(fh, request,chunksize=1048576)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        # just a function that clear the screen and displays the text passed as argument
        ui_update('{1:<10}\t{2:<10}\t{0}'.format(fileStats['name'],color(convert_size(int(fileStats['size'])),Colors.orange),color(f'{round(status.progress()*100,2)}%',Colors.green)))

        fh.seek(0)
        with open(os.path.join(location, fileStats['name']), 'wb') as f:
            f.write(fh.read())
            f.close()
    else:
        print("File Download Cancelled!!!")

4

1 回答 1

0

你可以自己计算速度。您知道块大小,因此您知道正在下载多少;下载速度的时间。

就像是:

from time import monotonic
...
CHUNKSIZE=1048576
while not done:
    start = monotonic()
    status, done = downloader.next_chunk()
    speed = CHUNKSIZE / (monotonic() - start)

或者,根据您的 gui,使用适当的进度条库(它将在内部执行类似的操作)。

请注意,非常长的行很难阅读。这个:

ui_update('{1:<10}\t{2:<10}\t{0}'.format(fileStats['name'],color(convert_size(int(fileStats['size'])),Colors.orange),color(f'{round(status.progress()*100,2)}%',Colors.green)))

应该写成这样:

name = fileStats["name"]
size = color(convert_size(int(fileStats["size"])), Color.orange)
progress = round(status.progress() * 100, 2)
progress = color(f"{progress} %", colors.green)
ui_update('{1:<10}\t{2:<10}\t{0}'.format(name, size, progress))

现在我们可以阅读它,我们可以看到只有进度值发生了变化。所以移动name到你的循环size 之外,只调用一次。

参考

https://docs.python.org/3/library/time.html#time.monotonic

于 2021-09-23T09:08:26.283 回答