<p>不过,搁架可能不是个好选择。。。在</p>
<p>您可以尝试使用<code>klepto</code>或<code>joblib</code>。两者都擅长缓存结果,并且可以使用高效的存储格式。在</p>
<p><code>joblib</code>和{<cd1>}都可以将结果保存到磁盘上的文件或目录中。两者都可以利用<code>numpy</code>内部存储格式和/或保存时的压缩…还可以根据需要保存到内存映射文件。在</p>
<p>如果使用<code>klepto</code>,它将字典键作为文件名,并将值保存为内容。使用<code>klepto</code>,您还可以选择使用<code>pickle</code>还是{<cd9>}或其他一些存储格式。在</p>
<pre><code>Python 2.7.7 (default, Jun 2 2014, 01:33:50)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import klepto
>>> data_dict = klepto.archives.dir_archive('storage', cached=False, serialized=True)
>>> import string
>>> import random
>>> for j in string.ascii_letters:
... for k in range(1000):
... data_dict.setdefault(j, []).append([int(10*random.random()) for i in range(3)])
...
>>>
</code></pre>
<p>这将创建一个名为<code>storage</code>的目录,其中包含pickled文件,<code>data_dict</code>的每个键对应一个。有一些关键字用于使用<code>memmap</code>文件,也有用于压缩级别的关键字。如果您选择<code>cached=False</code>,那么每次写入<code>data_dict</code>时,您将不再转储到文件,而是每次写入内存……然后您可以使用<code>data_dict.dump()</code>在您选择时转储到磁盘……或者您可以选择一个内存限制,当您命中它时,您将转储到磁盘。此外,您还可以选择一种缓存策略(如<code>lru</code>或{<cd17>}),以决定将哪些键从内存中清除并转储到磁盘。在</p>
<p>获取<code>klepto</code>此处:<a href="https://github.com/uqfoundation" rel="nofollow">https://github.com/uqfoundation</a></p>
<p>或者在这里得到<code>joblib</code>:<a href="https://github.com/joblib/joblib" rel="nofollow">https://github.com/joblib/joblib</a></p>
<p>如果您重构,您可能会想出一种方法来实现这一点,这样它就可以利用预先分配的数组。但是,这可能取决于代码如何运行的概要文件。在</p>
<p>打开和关闭文件会影响运行时吗?对。如果使用<code>klepto</code>,则可以设置要转储到磁盘的粒度。然后,您可以在速度和结果的中间存储之间进行权衡。在</p>