在另一个答案的帮助下,我终于找到了解决方案。这个想法是使用处理的压缩文件的大小,压缩文件的总大小以及用于估计剩余时间的时间。为达到这个,
- 将压缩文件作为字节对象读入内存:
byte_data
,速度相当快
- 计算
byte_data
使用的大小total_size = len(byte_data)
- 换成
byte_data
_byte_f = io.BytesIO(byte_data)
- 换成
byte_f
_bz2f = bz2.BZ2File(byte_f)
- 在处理过程中,使用获取压缩文件
pos = byte_f.tell()
中的当前位置
- 计算处理的确切百分比
percent = pos/total_size
- 记录使用时间,并计算剩余时间
几秒钟后,估计会变得非常准确:
0.01% processed, 2.00s elapsed, 17514.27s remaining...
0.02% processed, 4.00s elapsed, 20167.48s remaining...
0.03% processed, 6.00s elapsed, 21239.60s remaining...
0.04% processed, 8.00s elapsed, 21818.91s remaining...
0.05% processed, 10.00s elapsed, 22180.76s remaining...
0.05% processed, 12.00s elapsed, 22427.78s remaining...
0.06% processed, 14.00s elapsed, 22661.80s remaining...
0.07% processed, 16.00s elapsed, 22840.45s remaining...
0.08% processed, 18.00s elapsed, 22937.07s remaining...
....
99.97% processed, 22704.28s elapsed, 6.27s remaining...
99.98% processed, 22706.28s elapsed, 4.40s remaining...
99.99% processed, 22708.28s elapsed, 2.45s remaining...
100.00% processed, 22710.28s elapsed, 0.54s remaining...