使用多重处理时大FP树中链接节点的递归深度错误

2024-05-07 16:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个频繁模式增长算法,并计算出在构建了一个相当大的完整树之后,最重的计数部分可以并行化。你知道吗

FP-Tree是一种非二叉树结构,其中相同的名称可以出现在不同的节点上。每个节点都连接到下一个同名节点,因此不仅可以从根节点遍历树,还可以从连接所有同名节点的链接路径的一侧遍历树。从每个这样的节点遍历回根节点,同时构建和计算该路径的可能组合。你知道吗

通过将名字拆分,我想我可以对计数部分进行多重处理,因为算法只遵循树结构中的某个路径,在不改变它的情况下进行计数和合并。你知道吗

但现在我遇到了一个路障,我不明白多重处理的一个意外错误。以下面的示例代码为例。它有一个名为link的类,该类基本上只获取自身另一个实例上的链接。我构建了两个具有给定深度的类链,即每个link.link变量包含下一个link实例,而第一个是None。你知道吗

import multiprocessing as mpr

class link:
    def __init__(self,link=None):
        self.link = link

def main(maxRange):
    nproc = 2
    L = []
    for i in range(nproc):
        L.append(link())
        for j in range(maxRange):
            L[i] = link(L[i])
    LL = [L[:1],L[1:]]
    pool = mpr.Pool(processes=nproc)  
    pool.map(test,LL)
    pool.close()
    pool.join()
    return

def test(l):
    pass

if __name__ == "__main__":
    maxRange = 328
    main(maxRange)

一旦maxRange的值达到328,我就会得到这个错误:

  File "E:/PythonDir/Diverses/temp.py", line 896, in main
    pool.map(test,dfl)

  File "C:\Users\...\AppData\Local\Continuum\Anaconda2\lib\multiprocessing\pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()

  File "C:\Users\...\AppData\Local\Continuum\Anaconda2\lib\multiprocessing\pool.py", line 567, in get
    raise self._value

RuntimeError: maximum recursion depth exceeded while getting the str of an object

为什么多处理对包含对其他对象的引用的对象有问题?你知道吗

有办法解决这个问题吗?你知道吗

为什么是328?你知道吗


Tags: intestself路径map节点maindef