私の問題は非常に単純ですが、私はそれを解決する方法を見つけることができません。 私は約100万の配列のリストを持っており、それぞれ配列決定アダプターにアライメントする必要があります。私はBiopythonのpairwise2ツールを使ってPythonでの位置合わせを行うことを考えています。すべてのアライメントスコアを収集し、数学を行い、数学に基づいてシーケンスを選択する必要があるため、このツールを使用したいと思います。下のコードを実行すると動作しますが、1回のアライメントが1回だけ実行されるため速度が遅くなります。マルチスレッド上でのPythonのマルチスレッド
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()
が、私は毎回送付する必要があると私はそれらの多くを得るとき、私はコアとメモリ不足にどのように多くのシーケンスを調節することはできません。だから私はこのような何かを思いつきました。
どうすればいいですか?提案? これはかなり速いです 私はキューを実装することで、試してみましたが、それは
おかげ ルイージ