【发布时间】:2022-02-08 01:20:17
【问题描述】:
我有一个由大约 1M 行组成的 pandas 数据框,它包含用户输入的信息。我写了一个函数来验证用户输入的数字是否正确。我想要做的是在多个处理器上执行该功能,以克服在单个处理器上进行大量计算的问题。我所做的是将我的数据帧分成多个块,每个块包含 50K 行,然后使用 python 多处理器模块分别对每个块执行处理。问题是只有第一个进程正在启动并且它仍然使用一个处理器而不是在所有处理器上分配负载。这是我写的代码:
pool = multiprocessing.Pool(processes=16)
r7 = pool.apply_async(validate.validate_phone_number, (has_phone_num_list[0],fields ,dictionary))
r8 = pool.apply_async(validate.validate_phone_number, (has_phone_num_list[1],fields ,dictionary))
print(r7.get())
print(r8.get())
pool.close()
pool.join()
关于如何克服这个问题的任何建议?
【问题讨论】:
-
你可以使用
Pool.map()。这将允许您将可迭代对象异步映射到线程池 -
只是为了澄清我的理解,你是说 has_phone_num_list 有 20 个元素 - 即 20 * 50_000 == 1_000_000
-
@OlvinRoght 是的
-
@2pichar 我试过了,没有解决问题
-
看起来大部分工作仍在主进程中完成(仅加载了一个 cpu 核心)。向每个子进程发送大量数据(参数和返回值)效率相当低,这发生在主进程中。
标签: python multiprocessing python-multiprocessing