# 面试题:
1 wsgi uwsgi uWSGI,cgi,fastcgi 分别是什么?
2 如何自定制上下文管理器
3 Python是值传递还是引用传递
wsgi uwsgi uWSGI,cgi,fastcgi 分别是什么?
中间件:介于a和b之间的东西都称为中间件
'''
服务器中间件:nginx,apache
数据库中间件:介于应用程序和数据库之间的:MyCat
消息队列中间件:kafka,rabbitmq,Rocketmq
'''
CGI:通用网关接口(Common Gateway Interface/CGI),CGI描述了服务器(Nginx,Apache)和请求处理程序(django,flask,web框架)之间传输数据的一种标准。
'''
所有的bs架构软件都是遵守CGI协议的
总结:CGI是一个标准,定义了客户端服务器之间如何传数据的
'''
FastCGI:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与web服务器通信的协议。FastCGI是CGI的增强版。
# FastCGI致力于减少网页服务器与CGI程序之间互动开销,从而是服务器可以同时处理更多的网页请求
'''
常见的FastCGI服务器:Apache ,Nginx,Microsoft IIS
总结:FastCGI是CGI的增强版。
'''
WSGI:Python Web Server Gateway Interface,缩写为WSGI,Python定义的web服务器和web应用程序或框架之间的一种通用的接口
'''总结:为Python定义的web服务器和web框架之间的接口标准'''
uWSGI:符合wsgi协议的web服务器,用c语言写的,性能比较高,咱们通常用来部署django,flask
'''总结:一个web server,即一个实现WSGI协议的服务器,处理发来的请求及返回响应'''
uwsgi:uWSGI服务器实现的独有的协议,用于定义传输信息的类型,是用于前端服务器与uwsgi的通信规范
'''
uwsgi是uWSGI自有的一个协议
uWSGI:web服务器,等同于wsgiref
uwsgi:uWSGI自有的一个协议
'''
# nginx 是一个符合 fastcgi 协议的软件,处于浏览器和web程序之间,主要做请求转发和负载均衡,也可以称之为服务器中间件
web 服务器、服务器中间件到底是什么?
客户端(浏览器,APP)跟服务端(web框架)之间的东西,叫做服务器中间件,也叫web服务器。
web服务器有:
# nginx,apache 是一类东西,就是做请求转发的
# uWSGI,gunicorn 只针对于Python的web框架
# tomacat,jboss,webloogic 只针对Java的web框架
符合WSGI协议的web服务器
# 符合WSGI协议的web服务器
wsgiref,werkzeug(一个是符合wsgi协议的web服务器+工具包(封装了一些东西))
uWSGI 用c语言写的,性能比较高
gunicorn:python写的
tornado:也可以部署django项目
如何自定制上下文管理器
上下文管理器的用处:程时经常要处理的路径问题,通常程序工作在一个目录,但是过程中要去另一个目录处理一些文件,处理完还要切换回原目录,这就需要不停的调用 os.chdir。为了更便捷就有了上下文管理器(contextlib)
# 一个对象如果实现了__enter__和__exit__方法,那么这个对象就支持上下文管理,即with语句
# 上下文管理协议适用于那些进入和退出之后执行一些代码的场景,比如文件、网络连接、数据库连接或使用锁,使用事务的编码场景等
# 如何使用
class ComonSession:
def __enter__(self):
print('进入with语句块时执行此方法,此方法如果有返回值会赋值给as声明的变量')
self.session=session
return self.session
def __exit__(self, exc_type, exc_val, exc_tb):
self.session.close()
with ComonSession() as session:
session.filter()
print('上下文管理器结束了')
Python是值传递还是引用传递
严格意义上来说,Python既不是值传递也不是引用传递,Python有自己的传递方式,规则是:
'''
如果传递的是不可变类型,在函数中修改,就不会影响原来的变量
如果传递的是可变类型,在函数中修改,会影响原来的变量,对原来的值进行修改,而不是重新赋值
'''
# 什么是值?什么是引用?
值就是一个变量---->是一个具体的值(一块内存空间放着这个变量的值)
引用是一个变量---->内存地址(内存地址指向了值)
# 什么是值传递 什么是引用传递
-如果是值传递,函数中修改了传递的值,不会影响原来的
-如果是引用传递,函数中修改了传递的引用,就会影响原来的
标签:__,web,面试题,4.12,中间件,传递,服务器,uWSGI
From: https://www.cnblogs.com/zx0524/p/17315095.html