Python多处理编辑距离计算



我只编程了大约一年,所以对基础知识非常了解,但我很难理解python多处理文档。如果有人能为我指出解决眼前问题的正确方向,那就太好了。

我正在使用python Levenstein c-模块来计算大量DNA序列之间的成对距离(约5000-2000),并希望使用多处理来加快速度。我的问题的基本版本的伪代码如下:

def edit_distance(seqA, seqB):
    ...
    return distance
sequence_list = [seq1, seq2, ... seq10000]
results_dict = {}    
centroid = sequence_list[0]
results_dict[centroid] = {}
for target in sequence_list[1:]:
    results_dict[centroid][target] = edit_distance(centroid, target)

当完全实现时,将使用每个seq作为质心来执行此操作。如果有人能指出哪种方法最适合多处理sequence_list[1:]中所有目标的距离计算,那就太好了。谢谢

获取代码的多处理版本很简单:

from functools import partial
from multiprocessing import Pool
def dist_mp(centroid, target):
    return target, edit_distance(centroid, target)
def main():
    # ...
    pool = Pool() # use all CPUs
    for target, d in pool.imap_unordered(partial(dist_mp, centroid),
                                         sequence_list[1:]):
        results_dict[centroid][target] = d
    pool.close()
    pool.join()
if __name__ == "__main__":
    main()

如果edit_distance()函数发布了GIL,那么您可以使用线程而不是进程:

from multiprocessing.dummy import Pool # use threads

注意:如果使用时间复杂度更好的算法(避免在"完全实现时"情况下调用edit_distance()函数O(n**2)次),而不是通过使用多处理将其提高一个常数,则可能会获得更好的时间性能。

最新更新