Био.Выравнивание с использованием локального выравнивания Смита-Уотермана вызывает утечку памяти

#python #bioinformatics #biopython #sequence-alignment

#питон #биоинформатика #биопитон #выравнивание последовательности

Вопрос:

У меня есть список перестановок последовательностей ДНК, в которых получается оценка выравнивания пар последовательностей. Я не знаю, почему этот процесс вызывает утечку памяти, когда список перестановок большой, потому что объект выравнивания создается в каждом взаимодействии. Вот пример подсчета баллов:

 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))
 

Комментарии:

1. что такое alignments ? A dict / defaultdict? Может ли это быть причиной увеличения объема памяти?

2. Выравнивания — это диктат, но выравнивания — это не проблема, потому что я пытался сохранять одно за другим, и объем памяти значительно увеличился. Я предположил, что существует внутренний объект, который неправильно уничтожается. Итак, я решил использовать другую библиотеку (skbio), и проблема разрешилась! Спасибо!