0

我想使用多线程来使我的脚本更快......我还是新手。Python 文档假定您已经了解线程和其他东西。

所以...

我有看起来像这样的代码

from itertools import izip
from multiprocessing import Pool

p = Pool()
for i, j in izip(hugeseta, hugesetb):
    p.apply_async(number_crunching, (i, j))

这给了我很好的速度!

但是,hugesetahugesetb真的很大。Pool在完成工作后将所有ij保存在内存中(基本上,将输出打印到标准输出)。完成后是否有 del ij

4

2 回答 2

0

del 语句删除对象引用,因此可以在垃圾收集器运行时释放内存。

from itertools import izip
from multiprocessing import Pool

p = Pool()
for i, j in izip(hugeseta, hugesetb):
    p.apply_async(number_crunching, (i, j))

del i, j
于 2010-06-08T21:24:54.287 回答
0

不是真正的答案,但我Pool.imap()改用了:

for i in p.imap(do, izip(Fastitr(seqsa, filetype='fastq'), \
        Fastitr(seqsb, filetype='fastq'))):
    pass

效果很好,垃圾收集按预期进行,但是有一个没有任何东西的for循环感觉很有趣,但pass实际上做了一些有用的事情。

于 2010-06-09T14:39:38.960 回答