关于递归深度和函数内栈大小的问题,想讨论、求助一下...
如下是定义的一个函数,参数先忽略,实现的是根据参数指定范围:若满足判断条件则以循环来给线程赋参数,满不满足则递归一层,当输入参数改变递归层数和循环次数。功能能够实现,但是遇到一个问题:当参数较小(指递归深度“layerF”和循环再递归次数“for j in xrange(1,1+temp)”较小)时,程序能够正常实现功能,而当这两者之一或者同时增大时程序执行时就出现了逻辑错误(指非预期的错误,如多递归了一层),就想请问一下这是属于量变导致质变的错误,函数栈被塞满了,线程调用限制?还是代码本身有问题?
当递归深度为1时(不递归)循环生成线程数几百都没有问题;当递归深度为2,循环生成线程数大于36时就会异常,35以下都正常;当递归深度更深时,循环生存线程数异常的阈值就会更小。程序运行出问题时中没有达到最大层数等traceback,只有逻辑错误。
def DevThread(threads,paths,layerF,layerB,filenum,size,k,st):
if len(layerF)==1:
for i in xrange(1,(1+layerF[0])):
mkpath1=paths+'//Lev'+str(k+1)+'-'+str(i)
th=threading.Thread(target=intoDir,args=(mkpath1,layerB,filenum,size,k+1,))
threads.append(th)
else:
save=list(layerF)
temp=save.pop(0)
for j in xrange(1,1+temp):
dir=paths+'//Lev'+str(st)+'-'+str(j)
DevThread(threads,dir,save,layerB,filenum,size,k,st+1)