我有以下递归代码,在每个节点我调用sql查询以获取属于父节点的节点.
这是错误:
Exception RuntimeError: 'maximum recursion depth exceeded' in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879768c>> ignored
RuntimeError: maximum recursion depth exceeded while calling a Python object
Exception AttributeError: "'DictCursor' object has no attribute 'connection'" in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879776c>> ignored
Run Code Online (Sandbox Code Playgroud)
我调用以获取sql结果的方法:
def returnCategoryQuery(query, variables={}):
cursor = db.cursor(cursors.DictCursor);
catResults = [];
try:
cursor.execute(query, variables);
for categoryRow in cursor.fetchall():
catResults.append(categoryRow['cl_to']);
return catResults;
except Exception, e:
traceback.print_exc();
Run Code Online (Sandbox Code Playgroud)
我实际上对上述方法没有任何问题,但我还是把它放在了正确的问题概述上.
递归代码:
def leaves(first, path=[]):
if first:
for elem in …Run Code Online (Sandbox Code Playgroud) Python的sys模块提供了一个函数 setrecursionlimit,可以让您更改Python的最大递归限制.文档说:
最高可能的限制取决于平台.
我的问题是:在CPython下,各种平台的最高限制是多少?我想知道Linux,Mac和Windows的价值.
更新:我们可以避免"你做错了"的答案吗?我知道尝试进行非常深度的递归通常是一个坏主意.我已经考虑了我的具体情况的利弊,并决定我想这样做.
我是第一次使用Visual Studio 13编译c代码.代码运行完全正常,大小为64*64的2d阵列(我的程序中有一些数组)但如果我将数组大小增加到128*128则不会运行(但编译正确).相反,它会给出一条消息".exe已停止工作".如果我从linux运行代码,我的机器有4GB内存和相同的程序运行128*128阵列.
让我提供一些更多细节:我在同一台机器上使用英特尔C编译器(非商业版)从linux运行相同的代码.但由于某些问题,我现在被限制在Windows环境中工作.我搜索并安装了两个c编译器(1)Visual Studio 13和(2)Borland C.两者都适用于小阵列.但是当我增加数组大小时,Visual Studio会给出消息".exe已停止工作".我使用"开发人员命令提示符VS 13"中的"cl"编译程序.
我觉得问题在于堆栈大小.
在链接详细说明中(如下所示)我在linux环境中看到了一个命令"ulimit"来增加堆栈大小.我记得几年前使用它.
我觉得我们接近解决方案,但我的Windows(和VS 2013)的问题仍然存在,因为我没能执行dumpbin /headers executable_file或editbin /STACK:size.其实我觉得我不知道如何执行它们.我试图从"开发人员命令提示符VS 13",以及使用运行执行它们(windows启动自下而上>搜索(运行) - >运行(托)).如果可能,我请您提供更多详细信息.
我搜索并找到了这个网站,并在这里思考可以找到解决方案.
请帮忙.我想从Windows运行Visual Studio 13.
我正处于学习Python的早期阶段。我尝试计算较小值的阿克曼函数。它工作得很好,直到值为 (3,7)。任何高于该值(例如 3,8)的值都会引发此错误。[进程已完成,退出代码 -1073741571 (0xC00000FD)]
首先,我检查是否达到递归限制,但该过程在远低于设置的递归限制时停止(在本例中它设置为最大值)
import sys
sys.setrecursionlimit(999999999)
count = 0
def cf():
global count
count+=1
cf()
def Ack(m,n):
if m==0:
x=n+1
cf()
return x
elif m>0 and n==0:
x=Ack(m-1,1)
cf()
return x
elif m>0 and n>0:
x=Ack(m-1,Ack(m,n-1))
cf()
return x
a,b=map(int,input("Enter values").split())
print(a,b)
result=Ack(a,b)
print(result)
print(count)
Run Code Online (Sandbox Code Playgroud) 作为一个本地Java开发人员,我认为我已经达到了我习惯的情况.
我正在使用PyDev开发一个多线程Python 2.7应用程序,并在Windows 7 64位上运行Eclipse.它是多线程的,因为它使用wxPython,因此它使用GUI主线程和繁重的提升线程(以及我或我的有一些繁重的工作),每个回调一个线程.
我已达到一个点,我用appcrash消息得到一个弹出0xc00000fd错误python27.dll.这是因为线程中的函数返回值.如果我减少了回调正在使用的数据量,那么这段代码工作正常,所以我很确定堆栈上有太多的东西,并且没有任何递归变坏.
我可以stack_size在创建之前调用线程以增加可用空间,如果我想弄出多少空间可以满足它,这可能会有效.该线程将不得不做更多而不是更少的工作,所以这似乎是一个创可贴的情况.
我以为Python使用堆内存创建了堆栈,所以这在Python中应该不是问题?它是我的许多第三方apis之一,真正的罪犯?那么如果没有我在C中可以获得的低级内存创建决策能力,我如何从堆栈中获得一些内存并进入堆内存?