python - Pathos 处理池递归限制

标签 python recursion parallel-processing multiprocessing pathos

我有一个任务,我正在尝试与 pathos 并行处理。当我运行非并行版本时,它运行得很好。但是,运行 1 个进程的 pathos 池会导致运行时错误:超出最大递归深度。

例如:

import pathos.multiprocessing as mp
pool = mp.ProcessPool(1)
def _worker(fx):
    return fx[0](fx[1],fx[2])

在我尝试调试出现此错误的原因时,我尝试映射一个对象的列表。这在没有多处理的情况下工作

>>> map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties)))
[-0.34375]

其中 t1.getValue 是要应用的昂贵函数。我有一个完整的列表,列出了应用于相同两个参数的这些昂贵的函数。这就是并行处理的用武之地。但是以下会引发错误:

>>> pool.map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/pathos/multiprocessing.py", line 136, in map
    return _pool.map(star(f), zip(*args)) # chunksize
  File "/usr/local/lib/python2.7/site-packages/multiprocess/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/local/lib/python2.7/site-packages/multiprocess/pool.py", line 567, in get
    raise self._value
  RuntimeError: maximum recursion depth exceeded

有趣的是 getValue 不是递归的。我知道有时会在达到堆栈限制时发生这种情况。

我如何找出 getValue 的哪一部分导致错误以使多处理工作?我被卡住了,因为我不知道如何从这一点开始调试它。这是否可能实际上是由将数据传递给进程时的酸洗错误引起的? getValue 确实在幕后处理一些大型结构。

最佳答案

可以尝试使用sys.setrecursionlimit()来增加递归的限制,例如:

import sys
sys.setrecursionlimit(1000000)

关于python - Pathos 处理池递归限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307084/

相关文章:

python - Pandas groupby 没有将按列分组转换为索引

algorithm - 排序双链表插入中的递归

c - 如何在递归函数中寻址树

Java 并行流内部结构

c++ - 使用 openmp 并行化内循环

python - 如何在django中显示数据库中的视频在主页上

python - 如何向 plotly express 条形图添加一条线

python - 与进程池执行程序一起运行多个进程的 Tornado 并发错误

file - 从子路径中递归删除特定文件的脚本?

ruby - 附加到 Ruby 中的数组