내 문제는 매우 간단하지만 그것을 해결하는 방법을 알아낼 수 없습니다. 약 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()
을 스크립트가 작동하지만 때마다 보내 내가 그들을 많이 얻을 때, 나는 코어와 메모리가 부족 할 필요가 얼마나 많은 순서 조절 할 수 없다.
어떻게 할 수 있습니까? 제안? 나는 큐를 구현하여 시도하지만
감사 루이지