悲痛地排队任务然后获得结果

时间:2018-08-18 01:24:16

标签: python-3.x multiprocessing python-multiprocessing pathos

我有一个计算任务,可以有效地对大量数据集运行同一段代码。我想利用大型多核系统(例如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个小时。我希望多处理会产生一些开销,因此两个内核处理不会使速度提高一倍,但这似乎是错误的。有建议吗?

0 个答案:

没有答案