Я написал инструмент, который вызывает HMMER несколько раз, используя subprocess.call()
с пулом.
Код выглядит следующим образом:
pool = multiprocessing.Pool(num_cpus)
results = pool.map_async(run_scan,tuple(jobs))
pool.close()
pool.join()
`def run_scan(args):
command = map(str,[args["hmmsearch"],"--cpu", "1", "--max", "--
noali", "--domtblout",os.path.join(args["out_dir"] ,
args["basename"] + "." + args["source"] + ".result"),
args["hmm_db"], args["fasta_file"]])
subprocess.call(command)
return`
Итак, я запускаю пулsize num_cpus
и запускать каждое задание - это команда HMMER (hmmsearch
) со всеми соответствующими аргументами.
Моя проблема заключается в том, что пул никогда не закрывается, поэтому я могу видеть, что все мои задания HMMER завершены (в конце всех файлов stdout есть «[ok]», пул продолжает работать до тех пор, пока мой диспетчер задач не убьет его.Любая идея, почему это происходит и как я должен изменить свою реализацию?
Редактировать: Если я запускаю этот код с 3 файлами, он завершается, проблема начинается, когда я увеличиваю количество входных файлов (то есть количество заданий).
Я также пытаюсь реализовать с использованием DASK, но проблема сохраняется:
values = [delayed(run_scan)(job) for job in jobs]
results = compute(*values, scheduler = "multiprocessing",
num_workers=num_cpus)
Спасибо