9 uwgi相关名词解释、自定制上下文管理器、引用传递
一、wsgi uWSGI uwsgi cgi fastcgi分别是什么?
- wsgi(Web Server Getaway Interface,web服务器网关接口),Python Web 应用程序与 Web 服务器之间通用的接口
- uWSGI:符合wsgi协议的 Web 服务器,用c语言写的,性能高,处理请求返回响应
- uwsgi:uWSGI服务器实现的独有协议
cgi(common getaway interface,通用网关接口)
- cgi:服务器与web框架传输数据的标准,所有bs架构的软件都遵循cgi协议
- fastcgi:快速通用网关接口,是cgi的增强版,速度更快,NGINX、Apache、Microsoft IIS是符合fastcgi协议
什么是web服务器?
客户端与服务端之间的服务器中间件
NGINX、Apache 做请求转发
uWSGI只针对Python的
二、如何自定制上下文管理器?
- 定义
上下文管理器context manager 是Python2.5开始支持的语法
如果对象实现了双下enter和exit方法,那么这个对象就可以支持上下文管理器
实现方式是with关键字,比如with open as f: - 定义
class CodeBlockContext:
def __enter__(self):
print("entering code block")
def __exit__(self, exc_type, exc_value, traceback):
print("exiting code block")
# 使用上下文管理器
with CodeBlockContext():
print("this code block is being executed")
- 举例
with open 是非常典型的上下文管理器,用于打开文件的场景 ,
此外,网络连接、数据库连接、使用锁、使用事务等
三、Python的参数传递是值传递还是引用传递?
- 什么是值?什么是引用?
- 值:一个变量=具体的值=在一块内存地址放着这个变量
- 引用:一个变量=内存地址=内存地址指向了值
- 什么是值传递?什么是引用传递?
- 值传递:函数中修改了传递的值 不会影响原来的
- 引用传递:函数修改了传递的引用 就会影响原来的
严格意义上来说,Python的参数传递既不是值传递也不是引用传递
Python有自己的规则,具体规则如下:
- 如果是可变类型在函数中修改 就会影响原来的变量
- 如果是不可变类型在函数中修改 就不会影响原来的变量
# 可变类型修改会影响
l=[1,2,43]
def func(a):
a.append(1)
print(a)
func(l) # [1, 2, 43, 1]
# 不可变类型修改不影响
l=[1,2,43]
def func(a):
a=9
print(a)
func(l) # 9
- 如果是函数里面重新赋值,无论是可变还是不可变类型 都不会影响原来的变量
# 可变类型
l=[1,2,43]
def func(a):
a=[12,43,24]
print(a)
func(l) # [12, 43, 24]
# 不可变类型
l=[1,2,43]
def func(a):
a=1
print(a)
func(l) # 1