首页 > 解决方案 > 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 个任务),将队列对象放入列表中,然后轮询此列表以获取已完成的任务并将结果放入数组中。进度条监​​控任务的进展情况。

每个单独运行的 individual_config 任务需要 0.3-0.5 秒,但其中有 2820 个,因此在我的系统上大约需要 20 多分钟。

在这个新的 pathos 多处理处理池配置中运行时,它每 10-15 秒完成一两个。该任务预计需要 20 小时。我预计多处理会产生一些开销,因此不会获得双核处理的双倍速度,但这似乎是错误的。建议?

标签: python-3.xmultiprocessingpython-multiprocessingpathos

解决方案


推荐阅读