我有一个计算任务,可以有效地对大量数据集运行同一段代码。我想利用大型多核系统(例如72核)。
我正在2核系统上对其进行测试
output_array = []
pool = ProcessPool(nodes=2)
i = 0
num_steps = len(glob.glob1(config_dir, "*.ini"))
worker_array = []
for root, dirs, files in os.walk(config_dir):
for file_name in files:
config_path = "%s/%s" % (config_dir, file_name)
row_result = pool.apipe(individual_config, config_path, dates, test_section, test_type, prediction_service, result_service)
worker_array.append(row_result)
with progressbar.ProgressBar(max_value=num_steps) as bar:
bar.update(0)
while len(worker_array) > 0:
for worker in worker_array:
if worker.ready():
result = worker.get()
output_array.append(result)
worker_array.remove(worker)
i = i + 1
bar.update(i)
“ individual_config”是我的辅助函数。
此代码的基本原理是加载数据以创建所有任务(2820个任务),将队列对象放入列表中,然后轮询此列表以选择已完成的任务并将结果放入数组中。进度条监视任务的进度。
每个单独运行的configure_config任务需要0.3-0.5秒的时间,但其中有2820秒,因此在我的系统上大约需要20分钟。
在这种新的pathos多处理处理池配置中运行时,每10-15秒要完成一两个。该任务预计需要20个小时。我希望多处理会产生一些开销,因此两个内核处理不会使速度提高一倍,但这似乎是错误的。有建议吗?