我正在调用Python中的一个函数,我知道它可能会停止并迫使我重新启动脚本.
如何调用该函数或我将其包装成什么,以便如果它花费的时间超过5秒,脚本会取消它并执行其他操作?
是否有Python的数学表达式解析器+评估器?
我不是第一个提出这个问题的人,但答案通常指向eval().例如,人们可以这样做:
>>> safe_list = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'abs']
>>> safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ])
>>> s = "2+3"
>>> eval(s, {"__builtins__":None}, safe_dict)
5
Run Code Online (Sandbox Code Playgroud)
但这不安全:
>>> s_badbaduser = """
... (lambda fc=(
... lambda n: [
... c for c in
... ().__class__.__bases__[0].__subclasses__()
... if c.__name__ …Run Code Online (Sandbox Code Playgroud) 我一直在搜索这个问题,但似乎找不到确切的答案(大多数人都会陷入更复杂的事情,如多线程等),我只想做一些类似 Try, except 语句的事情,如果过程没有完成在 X 秒内它将抛出异常。
编辑:原因是我正在使用网站测试软件(selenium),其配置有时会导致其挂起。它不会抛出错误,不会超时或执行任何操作,因此我无法捕获它。我想知道确定这种情况已经发生的最佳方法是什么,以便我可以继续我的应用程序,所以我在想我是否可以做类似的事情,“如果这在 X 秒内还没有完成......继续” 。
我需要在python函数上设置一个时间限制,它使用一些多处理的东西(我不知道它是否重要).像这样的东西:
function(a_list):
p1 = Process(a_list[0:len(a_list/2)])
p2 = Process(a_list[len(a_list)/2: len(a_list)])
//start and join p1, p2
Run Code Online (Sandbox Code Playgroud)
我环顾网络,我找到了一个超时装饰,但它看起来相当棘手和冗长(我是装饰员的新手).我想要的只是一件简单的事情.
编辑:
我想我太简单了.我的程序遍历上面的函数并将结果存储在如下列表中:
while(something):
retval = function(some_list) # here I need the time out thing
# if function timed out then skip
ris_list.append(retval)
Run Code Online (Sandbox Code Playgroud)