我有一组简单的代码运行的Clustal欧米茄在Python(一种蛋白质多序列比对程序):并行化for循环蟒蛇
from Bio.Align.Applications import ClustalOmegaCommandline
segments = range(1, 9)
segments.reverse()
for segment in segments:
in_file = '1.0 - Split FASTA Files/Segment %d.fasta' % segment
out_file = '1.1 - Aligned FASTA Files/Segment %d Aligned.fasta' % segment
distmat = '1.1 - Distmats/Segment %d Distmat.fasta' % segment
cline = ClustalOmegaCommandline(infile=in_file,
outfile=out_file,
distmat_out=distmat,
distmat_full=True,
verbose=True,
force=True)
print cline
cline()
我在时间有多长做了一些非正式的测试我多序列比对(MSA)。平均每个人需要4个小时。一个接一个地跑完8个,总共花了我32个小时。因此,这是我原来的意图,将其作为for
循环运行 - 我可以让它运行而不用担心。然而,我做了另一个非正式的测试 - 我从印刷的斜面上得到了输出,并将它复制并粘贴到分布在两台计算机上的8个独立终端窗口中,并以这种方式运行MSA。平均每个人花了大约8个小时左右...但是因为他们都在同一时间运行,我只花了8个小时才得到结果。
在某些方面,我发现了并行处理! :D
但是我现在面临着如何让它在Python中运行的困境。我试过看过以下SO帖子,但我仍然无法围绕多处理模块如何工作。
名单职位:
- How do I parallelize a simple Python loop?
- Perform a for-loop in parallel in Python 3.2
- Parallel loop in python
- how to parallelize big for loops in python
会有人友好地分享他们如何并行这个循环?我做的许多循环看起来类似于这个循环,其中我对文件执行一些操作并写入另一个文件,而不需要将结果聚集在内存中。我所面对的特定差异是需要执行文件I/O,而不是并行运行循环的汇总结果。
由于其他职位已注明多种方式来实现'for'循环的并行化,有某些*特定的*会给你带来麻烦? –
没有任何示例处理文件I/O,而是处理汇总并行运行的结果。至少,这是我在阅读帖子时的想法。请原谅我的无知,我仍然认为自己是许多计算概念和Python的新手。 – ericmjl
如果文件I/O是你所关心的问题,请在问题中明确*。就目前而言,它与您所链接的问题完全相同。但是,AFAIK,文件I/O没有什么特别的。你只需要在进程之间使用一些锁,以避免输出到文件的无意义,你就完成了。 – Bakuriu