限制子进程一次运行的进程数.Popen
问题描述:
我有一个使用Python的子进程模块运行的计算密集型文件的列表。这个想法是使用Popen
而不是像check_call
那样更快速地浏览列表。但是,当列表大于计算机的4或5个元素时,程序会分离所有计算机资源,使其无法使用,直至完成。我的问题是:是否有一种方便的方法来限制我的程序一次打开的进程数量?限制子进程一次运行的进程数.Popen
我使用的代码很简单,但是是一个较大程序的一部分,因此粘贴运行它所需的所有代码是不可能的。
def run_fast(self):
'''
self.cps_dct is a nested dictionary dct[index1][index2]=filename
CopasiSE is a program for simulating mathematical models using the terminal/cmd
'''
for i in self.cps_dct.keys():
for j in self.cps_dct[i]:
subprocess.Popen('CopasiSE {}'.format(self.cps_dct[i][j]))
return self.cps_dct
感谢
答
添加到什么是由克劳斯建议: 类似的东西可以工作:
from multiprocessing import Pool
import subprocess
class Cps:
def __init__(self):
self.cps_dct = {
'a': {
'1': 'file1',
'2': 'file2',
'3': 'file3',
'4': 'file4'
},
'b': {
'1': 'file1',
'2': 'file2',
'3': 'file3',
'4': 'file4'
}
}
def open_proc(file_name):
subprocess.Popen('CopasiSE {}'.format(file_name))
if __name__ == '__main__':
process_cap = 4
p = Pool(process_cap)
# Initialize the object.
item = Cps()
for i in item.cps_dct.keys():
iterable = item.cps_dct[i].values()
p.map(open_proc, iterable)
p.close()
p.join()
您是否在寻找'multiprocessing.Pool'? https://docs.python.org/2/library/multiprocessing.html –