当每个任务运行“ subprocess.call()”时,池不会关闭

时间:2018-11-29 09:48:31

标签: python python-2.7 multiprocessing dask dask-delayed

我编写了一个工具,可以像在池中使用subprocess.call()一样多次调用HMMER。

代码如下:

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`

因此,我启动了一个大小为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)

谢谢

0 个答案:

没有答案