В Windows (по крайней мере), sys.setrecursionlimit
не полная история. Жесткий лимит устанавливается для каждого потока, и вам нужно вызвать threading.stack_size
и создать новый поток, как только вы достигнете определенного предела. (Я думаю, что 1 МБ, но не уверен) Я использовал этот подход, чтобы увеличить его до стека 64 МБ.
import sys
import threading
threading.stack_size(67108864) # 64MB stack
sys.setrecursionlimit(2 ** 20) # something real big
# you actually hit the 64MB limit first
# going by other answers, could just use 2**32-1
# only new threads get the redefined stack size
thread = threading.Thread(target=main)
thread.start()
Я не пытался понять, какие ограничения могут быть на threading.stack_size
, но не стесняйтесь попробовать ... вот где вам нужно посмотреть.
Таким образом, sys.setrecursionlimit
- это просто ограничение, установленное самим интерпретатором. threading.stack_size
позволяет манипулировать фактическим лимитом, установленным ОС. Если вы превысите последний предел первым, Python просто полностью рухнет.