首页 > 解决方案 > 多处理管理器酸洗失败

问题描述

我正在为学校作业实施随机森林算法,以便使用多处理使其更快,其中每个进程创建一棵树,这些树被限制在一定的深度,比如 200 或 500。

这些树存储在一个定义如下的字典中:

manager = multiprocessing.Manager()
return_dict = manager.dict()

当我运行深度为 200 的算法时,它工作得很好,但在 500 时,多处理库会产生错误:

Traceback (most recent call last):
  File "C:\Users\agust\AppData\Local\Programs\Python\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Users\agust\AppData\Local\Programs\Python\Python38\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\agust\PycharmProjects\tarea2\random_forest.py", line 27, in id3_aux
    return_dict[index] = nodo_res
  File "<string>", line 2, in __setitem__
  File "C:\Users\agust\AppData\Local\Programs\Python\Python38\lib\multiprocessing\managers.py", line 834, in _callmethod
    conn.send((self._id, methodname, args, kwds))
  File "C:\Users\agust\AppData\Local\Programs\Python\Python38\lib\multiprocessing\connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "C:\Users\agust\AppData\Local\Programs\Python\Python38\lib\multiprocessing\reduction.py", line 51, in dumps
    cls(buf, protocol).dump(obj)
RecursionError: maximum recursion depth exceeded while pickling an object

如果我理解正确,它不能腌制这棵树,因为它太深了。有没有办法增加酸洗的递归限制,或者以不同的方式存储树木来防止这个问题?

标签: pythonmultiprocessing

解决方案


推荐阅读