如何修改pytube中的下载分块大小以提升进度回调频率?
修改Pytube下载分块大小以频繁触发进度回调
Pytube默认的下载分块大小为9MB(9437184字节),每次下载完成一个分块才会调用on_progress回调函数。要让回调更频繁触发,只需调小这个分块大小,以下是两种实现方式:
方法一:直接修改全局分块常量
通过修改pytube.request.DEFAULT_CHUNK_SIZE的值,全局改变所有下载任务的分块大小:
from pytube import YouTube from pytube.request import DEFAULT_CHUNK_SIZE # 自定义分块大小,比如设置为1MB(1048576字节),可按需调整 DEFAULT_CHUNK_SIZE = 1048576 def on_progress(stream, chunk, bytes_remaining): total_size = stream.filesize bytes_downloaded = total_size - bytes_remaining percentage_of_completion = bytes_downloaded / total_size * 100 print(f"下载进度: {percentage_of_completion:.2f}%") def main(url): yt = YouTube(url, on_progress_callback=on_progress) video = yt.streams.get_highest_resolution() print(f"视频总大小: {video.filesize / 1048576:.2f}MB") video.download() if __name__ == "__main__": main("你的YouTube视频URL")
方法二:临时修改分块大小(不影响全局)
如果不想全局修改分块大小,可以在下载任务前后临时调整,完成后恢复原值:
from pytube import YouTube def on_progress(stream, chunk, bytes_remaining): total_size = stream.filesize bytes_downloaded = total_size - bytes_remaining percentage_of_completion = bytes_downloaded / total_size * 100 print(f"下载进度: {percentage_of_completion:.2f}%") def main(url): import pytube.request # 保存原始分块大小 original_chunk_size = pytube.request.DEFAULT_CHUNK_SIZE # 设置临时分块大小为512KB(524288字节) pytube.request.DEFAULT_CHUNK_SIZE = 524288 yt = YouTube(url, on_progress_callback=on_progress) video = yt.streams.get_highest_resolution() print(f"视频总大小: {video.filesize / 1048576:.2f}MB") video.download() # 恢复原始分块大小(可选) pytube.request.DEFAULT_CHUNK_SIZE = original_chunk_size if __name__ == "__main__": main("你的YouTube视频URL")
注意事项
- 分块大小不宜设置过小,否则会增加网络请求次数,可能降低下载速度,甚至触发服务器的请求频率限制。
- 若在新版本Pytube中找不到
DEFAULT_CHUNK_SIZE,可查看pytube/request.py源码,定位到分块大小的定义变量。
内容的提问来源于stack exchange,提问作者Mohammed Mahdi Djaballah
相关产品推荐
相关产品推荐

