Пул не закрывается, когда каждая задача запускает «subprocess.call ()» - PullRequest
0 голосов
/ 29 ноября 2018

Я написал инструмент, который вызывает 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)

Спасибо

...