如何解决502错误?
我认为导致502错误的原因是包含大量计算的嵌套循环。在本地服务器上完成该代码块最多可能需要2分钟。但是在公共服务器上我只是得到这个 502错误的网关 nginx / 1.10.3(Ubuntu)
for j in x:
if j == 1:
index_for_multi_array = 0
else:
index_for_multi_array = 1
q = con[j-1] # index 0 and 7
q = q * 1e-6
m = mass[j-1]
for i in range(1,int(bands[j-1])+1):
#read parameters
vc = float(_1_wnum[index_for_multi_array][i-1])
S0 = float(_1_int[index_for_multi_array][i-1] )
gamma_air = float(_1_abroad[index_for_multi_array][i-1])
gamma_self = float(_1_sbroad[index_for_multi_array][i-1])
n = float(_1_abcoef[index_for_multi_array][i-1] )
#resonance shape
alpha_1 = float( (1.0- q) * gamma_air + q * gamma_self ) * (P/P0) * ((T/T0) ** n)
fv = (alpha_1 / math.pi) * np.power((np.true_divide(v,vc)),2) * np.add((np.true_divide(1, np.power(v-vc,2) + alpha_1**2)) , np.true_divide(1,np.power((v+vc),2)+alpha_1**2))
gv = np.true_divide(v,vc) * pre_calculation / np.tanh(h*c*vc / (2*k*T)) * fv
S = S0 #line intensity
sigmav = gv * S0
qq = q * P/R/T*NA
kv = P/P0*T0/T*qq*sigmav
kvt[index_for_multi_array,:] = kvt[index_for_multi_array,:] + kv
内部循环的最大迭代次数为209,000 外循环的迭代次数为8
我的网站是用Django构建的。我也在使用numpy(我将其安装在公共服务器上),js,html和css。
首页也可以正常工作。单击一个按钮,我将重定向到另一个页面。该页面需要一段时间才能加载,因为在views.py中进行了大量计算,但是中途由于502错误而崩溃。
有什么想法可以从哪里开始解决该错误?
答案 0 :(得分:0)
更新:如果您的代码返回速度不够快,我建议您返回不返回任何计算的空白页面,并让该页面对繁重的计算进行ajax调用,以使其可以异步加载。计算完成后,页面将加载其结果:http://api.jquery.com/jquery.ajax/
因此,您要做的是将繁重的计算移至以JSON(https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.JsonResponse)之类的格式返回结果的视图,并在原始页面上设置Javascript来调用该视图,等待返回JSON,并在返回后将JSON呈现为您希望在页面上显示的任何格式。
另一种选择是塞满芹菜:http://docs.celeryproject.org/en/latest/
OLD:尝试将proxy_pass
更改为服务器IP,而不是127.0.0.1:8000
中的/etc/nginx/sites-available/myproject
。还要确保在您的settings.py
中,服务器的IP位于ALLOWED_HOSTS
中。
错误的网关通常不是编码问题的结果。它们通常是配置问题。
答案 1 :(得分:0)
使用nginx配置指令proxy_read_timeout和proxy_send_timeout使nginx不会过早终止代理连接并返回错误。
答案 2 :(得分:0)
解决了进入python2.7目录/usr/lib/python2.7/dist-packages/gunicorn并打开配置文件并找到超时功能,并将默认超时从30更改为60的问题。
运行命令服务gunicorn重新启动
这应该解决timout问题