Максимальная глубина рекурсии при использовании Pickle / cPickle
Фон: яm построение дерева для представления словаря, используя минимальный алгоритм построения. Список ввода представляет собой строки 4.3M utf-8, отсортированные лексикографически. Результирующий граф является ациклическим и имеет максимальную глубину 638 узлов. Первая строка моего скрипта устанавливает предел рекурсии в 1100 через.sys.setrecursionlimit()
Проблема: яЯ хотел бы иметь возможность сериализации моего дерева на диск, чтобы я мог загрузить его в память без необходимости перестраивать с нуля (примерно 22 минуты). Я пробовал обаpickle.dump()
а такжеcPickle.dump()
, как с текстовыми, так и с двоичными протоколами. Каждый раз я получаю трассировку стека, которая выглядит следующим образом:
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 663, in _batch_setitems
save(v)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 725, in save_inst
save(stuff)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 648, in save_dict
self.memoize(obj)
RuntimeError: maximum recursion depth exceeded
Мои структуры данных относительно просты:trie
содержит ссылку на начальное состояние и определяет некоторые методы.dfa_state
содержит логическое поле, строковое поле и словарь, отображающий метку в состояние.
я не очень знаком с внутренней работойpickle
- должна ли моя максимальная глубина рекурсии быть больше / равна n раз глубине дерева для некоторого n? Или это может быть вызвано чем-то еще, что яя не в курсе?
Обновить: Установка глубины рекурсии до 3000не поможет, так что этот проспект невыглядит многообещающе.
Обновление 2: Вы, ребята, были правы; Я был близорук в предположении, что рассол будет использовать небольшую глубину вложения из-за ограничений рекурсии по умолчанию. 10000 сделали свое дело.