mutliprocessing.Pool.add\u同步()耗尽记忆

2024-03-28 21:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用多线程来加快我的脚本。。。 我还是个新手。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是非常巨大的。Pool在完成任务后将所有的ij保存在内存中(基本上,将输出打印到stdout)。他们完成后有没有什么要删除的?在


Tags: 代码infrom文档import脚本for线程
2条回答

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

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

它工作得很好,垃圾收集如预期,但是有一个for循环除了pass之外什么都没有做实际上做了一些有用的事情。在

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

相关问题 更多 >