首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pathos处理池递归限制

Pathos处理池递归限制
EN

Stack Overflow用户
提问于 2016-10-28 22:17:02
回答 1查看 647关注 0票数 2

我有一项任务,我正在尝试将其与pathos并行化。当我运行一个非并行版本时,它运行得很好。但是,运行1进程的pathos池会导致RuntimeError: maximum递归深度已超出。

例如:

代码语言:javascript
复制
import pathos.multiprocessing as mp
pool = mp.ProcessPool(1)
def _worker(fx):
    return fx[0](fx[1],fx[2])

在尝试调试发生此错误的原因时,我尝试映射一个对象的列表。这在没有多处理的情况下是有效的

代码语言:javascript
复制
>>> map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties)))
[-0.34375]

其中t1.getValue是要应用的开销很大的函数。我有一个完整的列表,列出了应用于相同两个参数的这些权变函数。这是并行处理的用武之地。但是,下面的代码会抛出错误:

代码语言:javascript
复制
>>> 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确实在幕后处理一些大型结构。

EN

回答 1

Stack Overflow用户

发布于 2018-03-05 10:11:21

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

代码语言:javascript
复制
import sys
sys.setrecursionlimit(1000000)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40307084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档