一个Python递归调用深度的问题

1.背景

2.问题重现

3.问题解决

1)重写超时

2)对eventlet回退版本

4.参考资料

1.背景

在略微复杂一些的自动化测试脚本中,都会使用”超时”处理。因为采用eventlet进行超时处理,所以有了这一次的经验教训。代码是网上抄的,问题是自己找的。。。

2.问题重现

使用了网上一段超时代码,出处已经无从知晓了,在此向作者抱个歉了~~

import time
import eventlet

TIMEOUT=100

eventlet.monkey_patch()
try:
    with eventlet.Timeout(TIMEOUT):
        while True:
            act = foo(param1, param2)
            if act == exp:
                return True
            time.sleep(5)
except eventlet.timeout.Timeout:
    print('程序运行超时!')

在超时时间较短,模块调用不复杂的情况下,代码不会有出现问题。只是在自己用的自动化框架中,模块较多,调用关系复杂,加之创建资源等待时间较长(超过3min。这个是产品自身属性)。所以出现了,单个用例运行正常,多个用例一起执行时就会抛出如下异常:

RuntimeError: maximum recursion depth exceeded

超过递归调用深度。虽然可以手动临时修改,但毕竟不能从根本上解决问题。

3.问题解决

简单但没有再出错的代码:

TIMEOUT = 100

def timeout_func(TIMEOUT, act, exp):
    cnt = 1
    while cnt  TIMEOUT:
        raise Exception(f"超时了~~")

这个如参考资料所示。但由于Python版本非资料中说的3.6,所以这个方法没有考虑。留给各位看官实践吧~~

4.参考资料

Original: https://blog.csdn.net/aduocd/article/details/124389219
Author: aduocd
Title: 一个Python递归调用深度的问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/776132/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球