我想使用多线程来加快我的脚本... 我还是新手。 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 ?
答案 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
实际上做了一些有用的东西之外,感觉很有趣。