python-3.x - 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 小时。我预计多处理会产生一些开销,因此不会获得双核处理的双倍速度,但这似乎是错误的。建议?
解决方案
推荐阅读
- r - R 3.5.2:自定义函数内的管道 - 找不到对象“列”
- scala - 在scala中编写自定义monad时的withFilter实现
- python - 在 ubuntu 中运行 buildozer 时找不到 Git (git)
- ios - 水平 UICollectionViewCompositionalLayout 在项目单元格上显示部分标题
- firebase - Flutter:将小档案图片上传到 Cloud Firestore 数据库
- elasticsearch - Elasticsearch 从动态生成的索引中的数组对象中删除字段
- python - Numpy 没有产生所需的样本方差值
- php - cURL 重定向返回的 URL
- graphql - Apollo GraphQL 数据解构不起作用
- c# - 将 DateTime 插入 SQL 脚本