0

내 문제는 매우 간단하지만 그것을 해결하는 방법을 알아낼 수 없습니다. 약 1 백만 개의 시퀀스 목록이 있으며 각 시퀀스는 시퀀싱 어댑터에 정렬해야합니다. Biopython의 pairwise2 도구를 사용하여 파이썬에서 정렬 작업을 할 생각입니다. 나는 모든 정렬 점수를 수집하고, 수학을하고, 수학에 기반한 순서를 선택해야하기 때문에이 도구를 사용하고 싶습니다. 아래 코드를 실행하면 작동하지만 시간당 하나의 정렬 만 실행되기 때문에 속도가 느립니다.큰 multifasta 이상의 파이썬에서 multithreads

def align_call(record, adapter): 
score = pairwise2.align.localms(record.seq, adapter.seq, 1, -3, -1, -0.99, one_alignment_only=1, score_only=1) 
print record.id + " " + record.seq + " " + adapter.id + " " + str(score) 
#results.append(line) 
return 

if __name__ == '__main__':  
fastaSeq = argv[1] 
threads = argv[2] 
fastaAdapt = argv[3] 
listSeq = [] 
adpt = list(SeqIO.parse(fastaAdapt, "fasta")) 
for record in SeqIO.parse(fastaSeq, "fasta"): 
    align_call(record, adpt[0]) 

따라서, 나는 코드를 변경하고 컴퓨터에있는 스레드의 수에 따라 병렬 작업의 N 번호를 전송하여 처리 속도를 높이기 위해 멀티 스레딩 또는 멀티 프로세스를 사용하여 생각했다. 그래서 내가 이런 식으로 와서 :

results = [] 

def align_call(record, adapter): 
score = pairwise2.align.localms(record.seq, adapter.seq, 1, -3, -1, -0.99, one_alignment_only=1, score_only=1) 
line = record.id + " " + record.seq + " " + adapter.id + " " + str(score) 
results.append(line) 
return results 

if __name__ == '__main__':  
fastaSeq = argv[1] 
threads = argv[2] 
fastaAdapt = argv[3] 

listSeq = [] 
adpt = list(SeqIO.parse(fastaAdapt, "fasta")) 
for record in SeqIO.parse(fastaSeq, "fasta"): 
    pool = Pool(processes=1) 
    result = pool.apply_async(align_call, args= (record, adpt[0])) 
    print result.get() 

을 스크립트가 작동하지만 때마다 보내 내가 그들을 많이 얻을 때, 나는 코어와 메모리가 부족 할 필요가 얼마나 많은 순서 조절 할 수 없다.

어떻게 할 수 있습니까? 제안? 나는 큐를 구현하여 시도하지만

감사 루이지

답변

0

을 당신은 그것은 꽤 빠른 vsearch (또는 usearch)에보고 을 할 수 있습니다 작동하지 않았다! (이 경우 80 %)을 최대 %의 사용자가 허용 할 표적 서열에서 차이

--iddef 0은이다

https://github.com/torognes/vsearch

vsearch --usearch_global big.fasta -db adapter_seq.fasta --uc outputfile.txt --id 0.8 --iddef 0 --threads 6 

--id을 멀티 - 스레딩을 지원 점수 매기기 방법 0 = 가장 짧은 시퀀스에 기초한 동일성, 2 = 스트립 터미널 간격 ...)

그런 다음이 outputfile.txt를 읽고 정렬 점수/일치/간격/정렬 길이 쿼리 이름을 가져올 수 있습니다. 각 시퀀스에 대해 원하는 쿼리 이름을 수집하면 원래의 fasta 파일에서 관련 시퀀스를 가져올 수 있습니다.

x %보다 큰 시퀀스를 어댑터와 일치 시키려면 --matched, --uc 대신에 -uid와 일치하는 시퀀스의 fasta 파일을 제공합니다.

또는 --samout은 seq 이름, 정렬 길이, 정렬을위한 시가 코드 및 쿼리 순서와 함께 sam 파일을 제공합니다.

https://github.com/torognes/vsearch/releases/download/v2.7.1/vsearch_manual.pdf에는 출력 옵션 및 명령의 전체 집합이 있습니다.

관련 문제