Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中循环的并行化_Python_Loops_Parallel Processing_Biopython - Fatal编程技术网

python中循环的并行化

python中循环的并行化,python,loops,parallel-processing,biopython,Python,Loops,Parallel Processing,Biopython,我有一组简单的代码,可以从Python运行Clustal Omega(一种蛋白质多序列比对程序): 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 o

我有一组简单的代码,可以从Python运行Clustal Omega(一种蛋白质多序列比对程序):

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
循环运行的初衷——我可以让它运行而不必担心它

然而,我做了另一个非正式的测试——我从打印的cline中获取输出,复制并粘贴到分布在两台计算机上的8个单独的终端窗口中,并以这种方式运行msa。平均来说,每一个都需要8个小时左右。。。但因为它们同时运行,我只花了8个小时就得到了结果

在某些方面,我发现了并行处理!:D

但我现在面临着如何在Python中运行它的困境。我已经试着看了下面的文章,但是我仍然不能理解多处理模块是如何工作的

员额清单:


有人愿意分享一下他们将如何并行化这个循环吗?我确实看到了许多类似于这个循环的循环,在这个循环中,我对一个文件执行一些操作并写入另一个文件,而不需要在内存中聚合结果。我面临的具体区别是需要执行文件I/O,而不是聚合循环并行运行的结果。

对于段中的段,写入
def f(段)
,然后使用
multiprocessing.Pool().map(f,段)


如何将其置于上下文中留给读者作为练习。

对于段中的段,编写
def(段)
,然后使用
multiprocessing.Pool().map(f,段)

如何将其置于上下文中,留给读者作为练习。

可能就是您要寻找的

让我举一个使用它的例子:

import time
from joblib import Parallel, delayed


def long_function():
    time.sleep(1)


REPETITIONS = 4
Parallel(n_jobs=REPETITIONS)(
    delayed(long_function)() for _ in range(REPETITIONS))
此代码在1秒内运行,而不是4秒

调整代码如下所示(抱歉,我无法测试这是否正确):

可能这就是你要找的

让我举一个使用它的例子:

import time
from joblib import Parallel, delayed


def long_function():
    time.sleep(1)


REPETITIONS = 4
Parallel(n_jobs=REPETITIONS)(
    delayed(long_function)() for _ in range(REPETITIONS))
此代码在1秒内运行,而不是4秒

调整代码如下所示(抱歉,我无法测试这是否正确):



由于其他文章已经阐述了实现
for
循环并行化的多种方法,有什么具体问题困扰您吗?没有一个示例涉及文件I/O,而是涉及聚合并行运行的结果。至少,当我阅读这些帖子时,我是这么想的。请原谅我的无知,我仍然认为自己是许多计算概念和Python的新手。如果文件I/O是你关心的问题,请在这个问题上明确指出。就目前的情况而言,它与您链接的问题完全相同。不过,顺便说一句,文件I/O并没有什么特别之处。您只需在进程之间使用一些锁,以避免对文件进行无意义的输出,您就完成了。@Bakuriu,我从一开始就在帖子中这样做了。请阅读下面的一段。@ericmjl不,您的问题的唯一目的不清楚是如何处理并行I/O。在编写时,它看起来像是对代码中不相关细节的随意评论。如果你的问题是“我如何处理文件的并行输出?”那么就写吧,不要只写“我如何并行化这个循环?”然后,在一个随机的地方写上“代码碰巧包含文件I/O”。因为其他文章已经陈述了实现
for
循环并行化的多种方法,有什么具体的问题困扰着你吗?没有一个例子涉及文件I/O,而是涉及聚合并行运行的结果。至少,当我阅读这些帖子时,我是这么想的。请原谅我的无知,我仍然认为自己是许多计算概念和Python的新手。如果文件I/O是你关心的问题,请在这个问题上明确指出。就目前的情况而言,它与您链接的问题完全相同。不过,顺便说一句,文件I/O并没有什么特别之处。您只需在进程之间使用一些锁,以避免对文件进行无意义的输出,您就完成了。@Bakuriu,我从一开始就在帖子中这样做了。请阅读下面的一段。@ericmjl不,您的问题的唯一目的不清楚是如何处理并行I/O。在编写时,它看起来像是对代码中不相关细节的随意评论。如果你的问题是“我如何处理文件的并行输出?”那么就写它,不要只写“我如何并行化这个循环?”然后在一个随机的地方写“代码碰巧包含文件I/O”。我认为在这里使用
imap
而不是
map
可能是合适的,因为运行时间太长。我认为在这里使用
imap
而不是
map
可能是合适的,因为运行时间太长。谢谢你的帮助!我可以问一下,假设这是从IPython笔记本上运行的,我会把
下的部分放在一个单元格中,然后运行该单元格吗?是的,如果代码的其余部分包含在已计算的前一个单元格中,然后你可以按照你所描述的那样运行它。这在我的python版本中不起作用。它说没有这样的模块。@robbieboy74:你安装了Joblib库了吗?这不是一个标准的模块谢谢你的帮助!我可以问一下,假设这是从IPython笔记本上运行的,我是否会将
下的部分放在一个单元格中,然后运行该单元格?是的,如果代码的其余部分包含在已计算的前一个单元格中,那么您可以按您所描述的方式运行它。这不是