目前我有一个程序,它使用subprocess.Popen
打开可执行文件并传递参数 - 相当于在Linux上运行./path/to/file args
。
这工作得很好,但我必须执行这个文件超过 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 个命令。
有人有什么建议吗?
我喜欢concurrent.futures
像这样的简单情况,它是如此简单,但又如此有效。
import os
import glob
from concurrent import futures
from subprocess import Popen
optim = ("/usr/bin/jpegoptim")
img_path = os.path.join(os.path.abspath(os.path.curdir), 'images')
file_list = glob.glob(img_path+'/*jpg')
def compress(fname):
Popen([optim, fname, '-d', 'out/', '-f'])
ex = futures.ThreadPoolExecutor(max_workers=8)
ex.map(compress, file_list)
Doug Hellman的PyMOTW的精彩介绍。 https://pymotw.com/3/concurrent.futures/
您可以使用 Python multiprocessing
模块及其multiprocessing.pool.Pool
-> https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing