擅长:python、mysql、java
<p>您的处理速度必须非常快,除非您强制垃圾回收器(或者它没有达到其收集阈值),否则它将无法运行</p>
<p>我无法用您的数据测试您的示例,但强制调用的最后一个片段(这是正确的做法)错误地使用了垃圾收集器:</p>
<pre><code>import gzip
import gc
files=['thing1.gz', 'thing2.gz']
for current_file in files:
x=list(gzip.open(current_file,"r"))
gc.collect()
</code></pre>
<p>当您调用<code>gc.collect()</code>时,您收集的不是当前的<code>x</code>,而是上一个。在调用垃圾回收器之前,您必须<code>del x</code><em>,因为内存中不能同时存在这两个文件。在</p>
^{pr2}$
<p>现在,如果由于某种原因(wierd)仍然不起作用,只需执行两个进程并用一个参数调用它们:</p>
<p><code>master.py</code>包含:</p>
<pre><code>import subprocess
for current_file in files:
subprocess.check_call(["python","other_script.py",current_file])
</code></pre>
<p><code>other_file.py</code>将包含处理:</p>
<pre><code>import sys,gzip
with gzip(open(sys.argv[1])) as f:
x = list(f)
# rest of your processing
</code></pre>
<p>最后,将处理结果(必须更小)存储在结果文件中。在</p>
<p>在所有进程运行之后,收集<code>master.py</code>脚本中的数据并继续。在</p>