Python 断开的管道:使用来自多处理池的映射

Python 断开的管道:使用来自多处理池的映射,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我尝试在HPC中使用多处理来加速我的代码。它运行正常,但我添加了一些计算,突然它开始发布这个错误。我在没有进行多重处理的情况下运行了它,结果很好 前20次函数执行与多处理很好,但之后它开始滚雪球,这种错误越来越频繁地出现 日志中写着“在某个点超过了步骤内存限制”和“原因:'RuntimeError('调用Python对象时超过了最大递归深度',)” 我能修一下吗?如果没有多处理,它将永远无法运行。尝试使用并发。futures模块: from concurrent import futures

我尝试在HPC中使用多处理来加速我的代码。它运行正常,但我添加了一些计算,突然它开始发布这个错误。我在没有进行多重处理的情况下运行了它,结果很好

前20次函数执行与多处理很好,但之后它开始滚雪球,这种错误越来越频繁地出现

日志中写着“在某个点超过了步骤内存限制”和“原因:'RuntimeError('调用Python对象时超过了最大递归深度',)”


我能修一下吗?如果没有多处理,它将永远无法运行。

尝试使用
并发。futures
模块:

from concurrent import futures

def evaluation(f_list):
    with futures.ProcessPoolExecutor() as pool:
        return pool.map(eigencen, f_list)

尝试使用
concurrent.futures
模块:

from concurrent import futures

def evaluation(f_list):
    with futures.ProcessPoolExecutor() as pool:
        return pool.map(eigencen, f_list)

正在讨论的任务是CPU密集型的吗?如果不是的话,你可以用线程来代替。这相当消耗内存。我在一个有28个内核的节点上运行它,我认为在完成一个进程后,下一个进程的内存不会为空。这只是我的猜测。在这种情况下,您可以将多处理模块与队列结合使用。通常,就控制池进程而言,使用队列要灵活得多。我想到的另一个想法是使用concurrent.futures.ProcessPoolExecutor类,该类也具有映射函数。您是否从Egencen返回复杂/庞大的数据集?是的,它是一个具有约1k值的列表,我对130个数据集运行此函数这是一项CPU密集型任务?如果不是的话,你可以用线程来代替。这相当消耗内存。我在一个有28个内核的节点上运行它,我认为在完成一个进程后,下一个进程的内存不会为空。这只是我的猜测。在这种情况下,您可以将多处理模块与队列结合使用。通常,就控制池进程而言,使用队列要灵活得多。我想到的另一个想法是使用concurrent.futures.ProcessPoolExecutor类,该类还具有映射函数。您是否从
Egencen
返回复杂/庞大的数据集?是的,它是一个具有约1k值的列表,我对130个数据集运行了此函数。谢谢!我猜多处理任务分区出了问题。它成功了,谢谢!我猜多处理任务分区有问题。