mein Problem ist sehr einfach, aber ich kann nicht herausfinden, wie man es löst. Ich habe eine Liste von etwa einer Million Sequenzen und jeder von ihnen muss mit einem Sequenzierungsadapter ausgerichtet werden. Ich denke, die Ausrichtung in Python mit paarwise2-Tools von Biopython zu tun. Ich möchte dieses Werkzeug benutzen, weil ich alle Ausrichtungspunkte sammeln muss, einige Mathe tun und die Folgen auf der Mathe wählen muss. Wenn ich den Code unten ausführe, funktioniert es, aber es ist langsam, weil nur eine Ausrichtung pro Zeit ausgeführt wird.Multithreads in Python über eine große Multifasta
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])
Daher dachte ich, den Code zu ändern und Multithreading oder Multiprozess verwendet Prozess zu beschleunigen, indem eine Anzahl n von parallelen Jobs Senden von der Anzahl der Threads aus, dass der Computer aufweist. So kam ich so etwas nach oben:
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()
Das Skript funktioniert, aber ich kann nicht modulieren, wie viel Sequenz und sein muß jedes Mal senden, wenn ich eine Menge von ihnen zu bekommen, ich laufe aus Kern und Speichern.
Irgendeine Idee, wie ich das tun kann? Vorschläge? Ich habe versucht, durch Queue Umsetzung aber nicht
Dank Luigi