问题描述
我们使用使用 Django(旧版本)创建的仪表板,它使用 python2 来运行后端脚本。
我们使用以下代码实现了寻根算法,在 python3 中需要 5 秒,但在 python2 中需要超过 30 秒,这导致 Web 服务器请求超时错误。它如何加快流程以避免此错误?
def meet_the_target(factor):
#data processing with one for loop
return factor
def illinois_algorithm(f,a,b,y,margin=1000000):
''' Bracketed approach of Root-finding with illinois method
Parameters
----------
f: callable,continuous function
a: float,lower bound to be searched
b: float,upper bound to be searched
y: float,target value
margin: float,margin of error in absolute term
Returns
-------
A float c,where f(c) is within the margin of y
'''
lower = f(a)[0]
upper = f(b)[0]
# assert y >= (lower),f"y is smaller than the lower bound. {y} < {lower}"
# assert y <= (upper),f"y is larger than the upper bound. {y} > {upper}"
stagnant = 0
while 1:
c = ((a * (upper - y)) - (b * (lower - y))) / (upper - lower)
y_c = f(c)[0]
if abs((y_c ) - y) < margin:
# found!
return c
elif y < y_c:
b,upper = c,y_c
if stagnant == -1:
# Lower bound is stagnant!
lower += (y - lower) / 2
stagnant = -1
else:
a,lower = c,y_c
if stagnant == 1:
# Upper bound is stagnant!
upper -= (upper - y) / 2
stagnant = 1
illinois_algorithm(meet_the_target,-0.9,0.9,target)
我们使用了多种求根算法,如二分法、逆二次、二分搜索和 scipy 优化库,所有这些方法在 python3 上运行速度很快,但在 python2 上需要时间。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)