8-cgi fastcgi wsgi uwsgi uWSGI 分别是什么?如何自定制上下文管理器、Python是值传递还是引用传递

1 cgi fastcgi wsgi uwsgi uWSGI 分别是什么?
2 如何自定制上下文管理器
3 Python是值传递还是引用传递

1 cgi fastcgi wsgi uwsgi uWSGI 分别是什么?


# CGI:通用网关接口(Common Gateway Interface/CGI),CGI描述了服务器(nginx,apache)和请求处理程序(django,flask,springboot  web框架)之间传输数据的一种标准# 所有bs架构软件都是遵循CGI协议的# 一句话总结: 一个标准,定义了客户端服务器之间如何传数据# FastCGI:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本# FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求# 常见的fastcgi服务器:Apache,Nginx,Microsoft IIS# CGI的升级版# WSGI:Python Web Server Gateway Interface,缩写为WSGI,Python定义的Web服务器和Web应用程序或框架之间的一种通用的接口#一句话总结: 为Python定义的web服务器和web框架之间的接口标准#uWSGI:符合wsgi协议的web服务器,用c写的,性能比较高,咱们通常用来部署django,flask#一句话总结:一个Web Server(web服务器),即一个实现了WSGI协议的服务器,处理发来的请求及返回响应。# xml:socket 标签# uwsgi:uWSGI服务器实现的独有的协议,用于定义传输信息的类型,是用于前端服务器与 uwsgi 的通信规范# 1、一句话总结: uWSGI自有的一个协议uWSGI:web服务器,等同于wsgirefuwsgi:uWSGI自有的协议# 符合WSGI协议的web服务器wsgiref,werkzeug(一个是符合wsgi协议的web服务器+工具包(封装了一些东西))uWSGI 用c语言写的,性能比较高gunicorn:python写的web服务器到底是什么?服务器中间件
客户端(浏览器,app)  跟   服务端(web框架)之间的东西,服务器中间件
# nginx  apache  是一类东西,就是做请求转发,符合fastcgi服务器
# uWSGI,gunicorn 只针对于python的web框架
# tomcat,jboss,weblogic 只针对java的web框架
# php-fpm  针对于php的框架

2 如何自定制上下文管理器

# python的一种编程模式,用于进入和退出之后自动执行一些代码的场景# 一个对象如果实现了__enter__和___exit__方法,那么这个对象就支持上下文管理协议,即with语句
# 上下文管理协议适用于那些进入和退出之后自动执行一些代码的场景,比如文件、网络连接、数据库连接或使用锁,使用事务的编码场景等# session--->创建session对象--->最后用完要调用commit,close
# 如何使用from sqlalchemy.orm import scoped_session
from sqlalchemy import create_engine
from models import Base, User
from sqlalchemy.orm import sessionmaker
from models import User,Boy
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/db001?charset=utf8",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
# Session = sessionmaker(bind=engine)  # 把引擎传入
session = scoped_session(Session)class ComonSession:def __enter__(self):print('进入with语句块时执行此方法,此方法如果有返回值会赋值给as声明的变量')self.session=sessionreturn self.sessiondef __exit__(self, exc_type, exc_val, exc_tb):self.session.commit()self.session.close()with ComonSession() as a:res=a.query(Boy).filter_by(name='lqz').all()print(res)print('我完事了')# 我就用上下文管理器管理类 sqlalchemy 的链接对象session

在这里插入图片描述

3 Python是值传递还是引用传递


# 严格意义上来说,python既不是值传递,也不是引用传递,python是自己的传递方式,规则是:如果传递的是不可变类型,在函数中修改,就不会影响原来的变量如果传递的是可变数据类型,在函数中修改,不会影响原来的变量,修改,而不是重新赋值# python一切皆对象---》(你不要说)内部函数是一切皆引用(对象本质就是地址,就是引用)# 什么是值,什么是引用-值就是一个变量=具体的值(一块内存空间放着这个变量的值)-引用是一个变量=内存地址(内存地址指向了值)-所以python才有了可变和不可变类型
# 什么是值传递 什么是引用传递-如果是值传递,函数中修改了传递的值,不会影响原来的-如果是引用传递,函数中修改了传递的引用,就会影响原来的
# 不可变类型---》当参数传递---》在函数内部修改了这个值---》不会影响原来的
# def test(a):
#     a = a + 1
#     print('-----', a)
# a = 10
# test(a)
# print(a)# 可变类型---》当参数传递---》在函数内部修改了这个值---》会影响原来的
def test2(a):# a['name']='彭于晏'a = {'name': 'xxx', 'age': 99}  # 重新赋值,不行print('-----', a)a = {'name': 'lqz', "age": 19}
test2(a)
print(a)
在Python中,参数的传递方式既不是纯粹的值传递(pass by value)
也不是纯粹的引用传递(pass by reference)。Python 的参数传递采用的是“对象引用传递”,
也称为“对象的地址传递”。这意味着传递一个参数到一个函数时,实际上传递的是该对象的引用(在内存中的地址)。
因此,函数内部对参数的修改可能影响到原始对象。然而,Python 中的可变对象和不可变对象的行为是不同的。
1. **不可变对象(比如整数、字符串、元组):** 不可变对象在传递过程中是值传递的,函数内部的修改不会影响到原始对象。"""def modify_value(x):x += 10a = 5modify_value(a)print(a)  # 输出仍然是 5"""2. **可变对象(比如列表、字典):** 可变对象在传递过程中是引用传递的,函数内部的修改会影响到原始对象。"""def modify_list(lst):lst.append(4)my_list = [1, 2, 3]modify_list(my_list)print(my_list)  # 输出为 [1, 2, 3, 4]"""is 比较的是两个对象的内存地址,因为x和y都是贴向相同,所以判断为True。
那么为什么不能用==呢,==只是比较对象的值,不能判断两个变量贴向的对象是否相同。故而:可以认为Python的参数传递方式是“按对象传递(pass by object)”,即传递的是对象的引用。参考文章:https://zhuanlan.zhihu.com/p/69746955

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208889.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iperf3 网络测试

iperf3 测试网络的上下行带宽 下载地址 https://iperf.fr/iperf-download.php 开启服务器 开启客户端 常用命令 -c 代表客户端-s 代表服务端-u 代表 udp-r 代表数据方向是否反向 https://baijiahao.baidu.com/s?id1731514357681464971&wfrspider&forpc

智能驾驶产品开发中如何贯彻“正向开发”理念

摘要: 基于演绎法的正向开发理念,能够让智能驾驶产品在充分满足用户需求,保证产品质量的同时,确保开发目标合理且得到落实。 前段时间,微博CEO吐槽理想L9智能驾驶“行驶轨迹不居中”,在网上引发了热烈讨论…

二级指针

*代表指针变量。int*为p的类型。故pp第一个*表示pp为指针int** pp,指向p的二级指针。 p中储存a的地址,pp中储存p的地址。 打印,printf中**pp的表示:pp中储存的是p的地址,第一个*解引用地址p表示p的内容,p的…

微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库

初识Docker 项目部署的问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 Docker如何解决依赖的兼容问题的? 将应用的Libs (函数库)、Deps (依赖)配置与应用…

读像火箭科学家一样思考笔记06_初学者之心

1. 专业化是目前流行的趋势 1.1. 通才(generalist)是指博而不精之人 1.2. 懂得的手艺越多,反而会家徒四壁 1.2.1. 希腊谚语 1.3. 这种态度代价很大,它阻断了不同学科思想的交融 2. 组合游戏 2.1. 某个行业的变革可能始于另一…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 2

1、兰兰有一些数字卡片,从 1 到 100 的数字都有,她拿出几张数字卡片按照一定顺序摆放。想一想,第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案:C 2、按照下图的规律,阴影部分应该填 A、 B、 C、 D、 答案&am…

WPF树形控件TreeView使用介绍

WPF 中的 TreeView 控件用于显示层次结构数据。它是由可展开和可折叠的 TreeViewItem 节点组成的&#xff0c;这些节点可以无限嵌套以表示数据的层次。 TreeView 基本用法 例如实现下图的效果&#xff1a; xaml代码如下&#xff1a; <Window x:Class"TreeView01.Mai…

链表OJ--上

文章目录 前言一、反转链表二、移除链表元素三、链表中倒数第K个结点四、相交链表五、链表的中间结点 前言 一、反转链表 力扣206&#xff1a;反转链表- - -点击此处传送 思路图&#xff1a; 方法一&#xff1a;改变指向 方法二&#xff1a; 代码&#xff1a; //方法一 /…

【计算机网络笔记】路由算法之层次路由

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

【MybatisPlus】简介与使用

MyBatisPlus 1.简介 MyBatisPlus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生 官网&#xff1a;https://baomidou.com/ MyBatis-Plus特性&#xff1a; 无侵入&#xff1a;只…

2023亚太杯数学建模B题思路分析 - 玻璃温室中的微气候法规

1 赛题 问题B 玻璃温室中的微气候法规 温室作物的产量受到各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气候因素 , 温室的设计通常采用带有温室风扇的通风系统&#xf…

laravel引入element-ui后,blade模板中使用elementui时,事件未生效问题(下载element-ui到本地直接引入项目)

背景 重构公司后台项目&#xff0c;使用了dcat-admin&#xff0c;但是dcat-admin有些前端功能不能满足需求。因此引入element-ui进行相关界面的优化 具体流程 1.下载element-ui到本地 2.进入如下目录 打开 node_modules\element-ui\lib 复制index.js 打开 node_modules/ele…