python 多处理子进程 - 高 VIRT 使用率导致内存错误

python multiprocessing subprocess - high VIRT usage leads to memory error

我在多处理中使用 pool.map 来执行我的自定义函数,

def my_func(data): #This is just a dummy function.
   data = data.assign(new_col = data.apply(lambda x: f(x), axis = 1))
   return data

def main():
    mypool=pool.Pool(processes=16,maxtasksperchild=100)
    ret_list=mypool.map(my_func,(group for name, group in gpd))
    mypool.close()
    mypool.join()
    result = pd.concat(ret_list, axis=0)

这里 gpd 是一个分组数据帧,所以我一次将一个数据帧传递给这里的 pool.map 函数。我一直在这里收到内存错误。

正如我从这里看到的,VIRT 增加到数倍并导致此错误。

两个问题,

  1. 如何在 VIRT 解决这个关键的内存增长问题?可能是在这里玩块大小的一种方式。?
  2. 第二件事,虽然它启动了我在 pool(processes) 中提到的那么多 python 子进程,但我可以看到所有 CPU 都没有达到 100%CPU,似乎它没有使用所有过程。一次一个或两个 运行?可能是由于它在我每次传递的不同数据帧大小上应用相同的块大小(某些数据帧会很小)?我如何利用此处的每个 CPU 进程?

仅供将来寻找答案的人使用。我通过使用 imap 而不是 map 解决了这个问题。因为 map 会生成一个密集的迭代器列表。