【发布时间】:2019-08-20 11:15:27
【问题描述】:
我正在创建进行大量独立计算的软件的并行化,以便研究所不需要 6 小时来计算一次运行。这些结果保存在数组列表中。数组长度是静态的。然后用 pickle.dump(obj) 转储此列表。
区别在于单线程的大小为 6.5 KiB 而多线程的大小为 20,4 KiB
首先: 我做了我的研究,是的,你不应该使用泡菜,但大学就是大学。我还测试了我的多线程实现,我在最后几天这样做了,我什至用手比较了一个较小的样本来确定,所以当你建议我应该检查我的多线程实现时,我没有帮助。
现在我做了什么: 首先,比较所有元素,在单线程和多线程创建的列表之间,它们是相同的。比较长度、形状,sys.getsizeof(obj) 是一样的。 然后我查看了 pickle.dump(obj),它自己选择协议,所以我尝试使用不同的协议。我得到了不同的结果,但不是我预期的更小。
最后,我检查了我是否真的只转储列表,是的,只转储列表。
正如上面所写,人们期望为完全相同的列表获得完全相同的转储文件大小,那么为什么没有发生这种情况呢?
是的,我是新来的,没有掌握所有规则,所以请就如何改进问题提供适当的反馈。
【问题讨论】:
-
解开两个文件时是否得到相同的列表?如果它们不相同,则说明您的多线程代码有问题。
-
是的,我解开它们并得到相同的文件。
-
听起来很奇怪,但两个列表最终相等才是最重要的,不是吗?我会将此归咎于泡菜的实施并继续前进。如果您想对此进行调查,最好提供minimal reproducible example。
-
遗憾的是它不是,因为更大的转储会导致处理的后续步骤变慢,让我很长时间感到困惑......
标签: python python-3.x list pickle