我有一个由远程 API 调用返回的字典的排序列表(通常响应小于 4 MByte。
我想将此列表分成多个 block ,其中结果单个 block 的最大允许大小为 1 MByte。*
结果 block 列表需要保留初始排序;然后这些 block 将被序列化(通过 Pickle)并放入不同的 Blob 字段中,最大大小为 1 MByte。
使用 Python 2.5 实现该目标最快的代码是什么?
* block 的数量应该是符合 1MByte 限制的最低数量
请您参考如下方法:
跟进我的评论。你可以使用 this extension . 以及以下脚本。假设这不会优化 block 的大小。它只保证它们都不大于 MAX
from sizeof import asizeof
matrix=[]
new_chunk = []
size_of_current_chunk = 0
for x in your_sorted_list:
s = asize(x)
if size_of_current_chunk + s > MAX:
matrix.append(new_chunk)
size_of_current_chunk = 0
new_chunk = []
size_of_chunk += s
new_chunk.append(x)
if len(new_chunk):
matrix.append(new_chunk)
元素 matrix 将包含每个对象中少于 MAX 字节的对象列表。
衡量 asize 的性能与仅将对象编码为 json 字符串并将 json 字符串乘以 sizeof(char) 的性能会很有趣。
