multiprocessing.Pool.add sync()占用内存

时间:2010-06-08 21:20:49

标签: python multiprocessing pool

我想使用多线程来加快我的脚本... 我还是新手。 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))

这给了我很大的速度!

然而, hugeseta hugesetb 非常庞大。在完成工作后,池会将所有 i j 保留在内存中(基本上,打印输出到stdout)。完成后是否有del i j

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

不是答案,但我使用了Pool.imap()代替:

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

哪个效果很好,垃圾按预期收集,但是for循环除了pass实际上做了一些有用的东西之外,感觉很有趣。