递归Python的超时

Stu*_*Cat 1 python recursion timeout

我有一个脚本,可以递归地分析链接中的javascript,所以如果它找到了javascript,那么它会分析javascript,如果它正在分析的javascript包含更多的javascript,那么它会继续运行,等等.但是,我遇到过这种递归永远不会停止的问题,有没有办法为这个递归添加超时?

kin*_*all 6

Python有一个内置的递归限制,RuntimeError如果超出这个限制将会提高.默认情况下,它的堆栈限制为1000.所以:

try:
    func_that_may_recurse_infinitely()   # i.e., your JavaScript crawler func
except RuntimeError as e:
    if "recursion" in str(e):
        print "stop all the downloadin'!"
Run Code Online (Sandbox Code Playgroud)

sys.setrecursionlimit()如果您需要更深或更浅,可以修改初始递归限制.

但是,更好的方法可能是保留set()您已经看过的项目,然后拒绝处理您已经处理过的任何项目.这可以防止您首先进入递归情况.