首页 > 解决方案 > 在多个处理器上运行外部应用程序

问题描述

目前我有一个subprocess.Popen用于打开可执行文件并传递参数的程序 - 相当于./path/to/file args在 Linux 上运行。

这工作得很好,但我必须执行这个文件超过 1000 次,目前它一次完成一个,在一个处理器上。例如,我希望能够以 8 个为一组执行此文件,因为我有一台 8 核 PC。

我尝试了以下方法:

bolsig = ("/home/rdoyle/TEST_PROC/BOLSIG/bolsigminus")

infile_list = glob.glob(str(cwd)+"/BOLSIG Run Files/run*")

cmds_list = [[bolsig, infile] for infile in infile_list]
procs_list = [Popen(cmd) for cmd in cmds_list]           

for proc in procs_list:        
    proc.wait() 

但这会尝试同时执行所有 1000 个命令。

有人有什么建议吗?

标签: pythonconcurrencymultiprocessingsubprocesspopen

解决方案


您可以使用 Pythonmultiprocessing模块及其multiprocessing.pool.Pool-> https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing


推荐阅读