pythonで並列処理する方法
Q&A
Closed
解決したいこと
以下のプログラムを並列処理して高速化したいです。何か方法はあるでしょうか?
プログラムは、cluster_idで指定された文字列を含むseqsの要素をcluster_id別のファイルに書き出す処理をしたいです。とにかく現状よりも高速に動かしたいと言うのが目的です。
# cluster_id=[["AAA","BBB", "CCC"], ["DDD", "EEE", "FFF"], ...]()
# seqs=["123AAA323...","AAB3was23...","123aCCC23...",...](200万)
for i, ids in enumerate(cluster_id):
with open(f"CLUSTER_{i}_ID.fas", "w+") as w:
for seq in tqdm(seqs):
for id in ids:
if id in seq[:100]:
w.write(seq)
自分で試したこと
例えば以下のことを試しましたが、普通にシングルコアで動いているっぽく、出来ませんでした。
from concurrent.futures import ProcessPoolExecutor
def write_seq(seq, ids, w):
for id in ids:
if id in seq[:100]:
w.write(seq)
return
with ProcessPoolExecutor(max_workers=6) as executor:
for i, ids in enumerate(cluster_id):
with open(f"{outputdir}/CLUSTER{i}_ID.fas", "w+") as w:
for seq in tqdm(seqs):
executor.submit(write_seq, seq, ids, w)
0