问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

webpy + nginx with fastcgi方案怎么样

发布网友 发布时间:2022-04-24 19:56

我来回答

1个回答

热心网友 时间:2023-10-09 05:50

起初我很是奇怪,按理说只有当静态文件不存在时nginx才会返回404错误,而现在访问的是配置在nginx.conf中的一个动态路径,该动态路径请求通过fastcgi最终会映射到某个python class的GET或POST方法中,那为什么nginx会返回404呢?
查阅相关文档之后发现
fastcgi在遇到webpy或其他后端http模块处理极慢的情况下,也就是说超过nginx允许的应答时间,nginx就会对此动态路径请求做出404的应答
针对此情况,我开始着手准备一系列测试和实验
实验
实验一:剥离fastcgi,单独使用webpy,进行压力测试
这个实验很简单,只需要注释掉一行代码,便可以以纯webpy方式访问,基于webpy的python应用main入口一般都是这样:
?
1
2
3
4

if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func,addr)
app.add_processor(web.loadhook(session_hook))
app.run()

只需要注释掉第二行即可,之后在终端下运行python <filename>.py,webpy会默认监听本地的8080端口,之后无论是通过浏览器还是其他方式访问相应地址即可
同时,还需要准备一份发起http请求的代码,python用来干这活最简单不过了
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

import httplib

server = "192.168.2.2:8080"
url = "/user/login?username=xxx@domain.com&password=111&rnd=33"

class perftest:
def __init__(self):
pass

def run(self):
conn = httplib.HTTPConnection(server)
for i in range(100):
try:
conn.request("GET", url)
rsp = conn.getresponse()

if 200 == rsp.status:
print "headers", rsp.getheaders()
content = rsp.read()
print "content", content
except Exception, ex:
print "ERR:", ex
conn.close()

跑了几次压力之后,webpy扛不住了…开始大面积抛异常,大致意思是python自带的logging模块出错,因为有频繁的文件打开关闭操作,某个操作导致文件句柄被非法访问…
在查看相关的log封装类之后发现,python的日志模块设计实在是有点不够内聚,也可以说不够彻底吧,不由得想起了之前用过的log4net,真是简洁啊
出错的原因在项目中开发同事封装的log模块多次执行了addHandler和removeHandler操作,据说在之前的开发过程中还出现过一行日志打印多遍的情况,而且随着程序的运行,相同的日志会越来越多…
顺手将该封装修改为单例类之后,故障解除
处理完之后接着跑压力,webpy还是会偶尔打印异常信息,不过已经变成了session访问异常,还好的是出现面积很小,于是开始增加压力测试的并发量,结果表明稳定度还是可以的,性能也在可以接受的范围之内
实验二:保持最终部署环境不变(nginx+fastcgi+webpy),继续压力测试
在上次测试解决完日志的问题之后,我开始以真实环境做相关的测试,要注意的是使用nginx之后,需要访问nginx.conf中配置绑定的相关端口,不再是webpy默认的8080端口
继续做上述的压力测试,性能也在可以接受的范围之内
实验三:模拟用户环境
根据测试MM所描述的,浏览器在B子系统出错过程中扮演了很关键的角色,于是我分别使用几个浏览器和纯粹的python代码分别访问相同的地址
几种组合的测试发现:
浏览器在只访问B子系统的情况下,一直表现正常
一旦浏览器访问过A子系统之后,再次访问B子系统即出现测试MM描述的404现象
python代码一直访问正常
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
《后宫之王子的幸福》主要讲述了什么? 我家的美少女网络轻小说 With Ribbon基本资料 觉醒鉴定术发现女儿来自未来女主是谁 气球如果不断上升但是也不会爆炸,上升到多高的时候就能达到第一宇宙速... 微星2070 装甲师 和索泰2070X-GAMING哪个更好一些 氮化镓充电器怎么样 GaN充电器和普通充电器有什么区别 氮化镓充电器为什么有电流声 氮化镓充电器有滋滋电流声怎么办 什么是访问学者?如何申请访问学者呢? 访问学者什么身份 BAE上怎么用webpy连接mysql Web.py,web2py,Django 三者间到底是什么关系?能做一个比较吗 web.py 现在支持Python3.2吗 web.py怎么获取前端数据 webpy 可实现多少路并发请求 现在python3 有哪些web框架 python web开发 用什么工具 如何用webpy对数据库进行操作 Python的web框架很多,比如Django,webpy等,但是哪一种综合实力最强呢... webpy怎么访问文件呢? web.py是干嘛的? 自己的号码是小号 怎么知道大号? 韩通赢吉重工跟韩通船舶是一家吗 sany三一重工,这种起英文名的方式叫作什么 男装什么牌子好 家人们,国潮中比较良心的品牌有哪些? 吉业重工的衣服不能买吗? 吉业重工可以买吗 吉业重工什么意思? 吉业重工是什么牌子? 瞧瞧安然的哥特风造型,时髦又高级,黑色洛丽塔怎么穿不显老? 什么牌子的衣服是洛丽塔风格的? 萝莉塔该怎样搭配手套(包括腕饰)和袜子? lolita装的BLACK LOLITA 黑人没有美女吗?黑美人洛丽塔爆红网络后,后来怎样了? 太原(山西)有人知道lolita(洛丽塔)吗? 求动漫中黑发的萝莉? 长寇演绎和风妖精,实力展现和风洛丽塔的惊艳之美,好看吗? 女生的穿着打扮一般分为哪几种呢?如甜美可爱的,中性的,成熟的等等,越详细越好哦,非常感谢O(∩_∩)O~ 洛丽塔风格的发型,应该是怎样穿呢? 请问类似洛丽塔风格的服装的品牌有哪些? 虽然裙长只有80多,但仍然显优雅,短款的洛丽塔有多美? 为啥拳皇的场景二十多年还是感觉很洋气 Lo娘真豁出去了,在裙子上挂一堆铁链,看着有多新潮? 购买MacBook 值得吗? 大学生买mac还是win好? 买一台苹果笔记本能干什么? 买macbook还是ipad? 第一次买mac,有什么要注意的 上大学买mac合适吗?