python - Bio.Align 使用 smith-waterman 局部对齐导致内存泄漏
问题描述
我有一个 DNA 序列排列列表,其中获得了序列对的比对分数。我不知道为什么当排列列表很大时这个过程会导致内存泄漏,因为在每个交互中都创建了对齐对象。这里是分数计算的例子:
for sequence1, sequence2 in sequence_permutation:
score = self.__calculate_sequence_similarity(sequence1, sequence2)
alignments[sequence1].append(sequence2)
save_aligments(alignments)
def __calculate_score_alignment(self, sequence1, sequence2):
from Bio.Align import substitution_matrices
from Bio import Align
from Bio.SubsMat import MatrixInfo
aligner = Align.PairwiseAligner()
aligner.mode = 'local'
aligner.substitution_matrix = substitution_matrices.load('BLOSUM62')
return aligner.score(sequence1, sequence2)
def __calculate_sequence_similarity(self, sequence1: str, sequence2: str) -> float:
if not sequence1 and not sequence2:
return -1
score = self.__calculate_score_alignment(sequence1, sequence2)
score1 = self.__calculate_score_alignment(sequence1, sequence1)
score2 = self.__calculate_score_alignment(sequence2, sequence2)
return score / (math.sqrt(score1) * math.sqrt(score2))
解决方案
推荐阅读
- bash - 如何在脚本中使用 getopts 将单独目录中文件的行附加到新文件?
- c# - 从 Azure 表存储中获取 1000 多个数据集
- arrays - 根据阈值将不同的乘数应用于整数
- java - 如何修复 JavaFX 中值更改的这个错误?
- python - ptvsd:信号仅在主线程中有效。尝试在 Docker 容器中配置 Flask 应用程序的 vscode 调试
- c - GCC 编译器中的条件移动 (cmov)
- reactjs - 如何在 TypeScript 中定义 React 类/函数组件(带类型检查)
- java - javafx 迁移到 java 11 - 字符编码问题
- python - 类方法包装一个函数 - 参数问题
- machine-learning - 插补仅用于特征选择步骤,但不适用于 sklearn 管道中的模型输入