我编写了一个工具,可以像在池中使用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)
谢谢