python 装饰器
装饰器应用
Python装饰器的应用比较广泛,大部分场景的公共处理逻辑都可以使用装饰器去简化。(使用上类似于JAVA中的注解)一般比较常见的场景比如:
- 日志记录
- 权限验证
- 单例模式
- 竞争资源管理
GIL是CPython中特有的全局解释器锁
这把锁在解释器进程中是全局有效的,它主要锁定Python线程的CPU执行资源。
在CPython解释器中当一个线程需要执行CPU进行计算之前,它需要先获得这把大锁;否则即使已经被操作系统调度出来,但仍然无法执行计算。所以CPython解释器中,线程的想要执行CPU指令需要2个条件:
1.被操作系统调度出来【操作系统允许它占用CPU】
2.获取到GIL【CPython解释器允许它执行指令】
所有线程都是轮流占用CPU执行指令
在早期的Python版本(3.2之前)中,GIL除了会让多线程在多核机器下表现槽糕外,它还会导致某些线程场景占用GIL,而其它线程却无法申请到。典型场景是:
- 在2个线程的情况下
- 一个是IO密集型线程
- 一个是计算密集型线程
进程、线程、协程
进程、线程、协程间的特性决定了它们的应用场景不同:
协程常用于IO密集型工作,例如网络资源请求等;而进程、线程常用于计算密集型工作,例如科学计算、人工神经网络等。
Celery异步任务队列
Celery 是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具。
这是一个任务队列,着重于实时处理,同事还支持任务调度。
Celery通过信息进行童心,通常使用经纪人在clients和workers之间进行调解。要启动一个任务,客户端会在队列中当放入一条信息,
然后经纪人将信息传递给工人。
一个Celery系统可以由多个worker和broker组成,从而实现高可用性和横向性质。
celary是用python编写的,但协议可以用任何语言实现。处理python外,还有node.js的Node-celery,PHP客户端,golang的gocelery和Rust的rusty-celery
Celery实现异步任务与定时任务
消息队列与任务队列:是一种实现生产者到消费者童心的童心模型,用于传递消息的,如Kafka,RabbitMQ
任务队列在消息队列之上实现各种任务,比如发邮件
Celery:消息中间件(Broker),任务执行单元(worker),结果存储(Backend)
工作流程:Task client提交任务到Broker,Worker监控Broker取出来的任务并执行,执行结果保存在Backend中。
celery应用开发:celery实例初始化,任务定义,启动worker,调用任务。
Celery多用来执行异步任务,
将耗时的操作交由Celery去异步执行,比如发送邮件、短信、消息推送、音视频处理等。
还可以执行定时任务,定时执行某件事情,比如Redis中的数据每天凌晨两点保存至mysql数据库,实现Redis的持久化。
1、从类型上来说,mysql是关系型数据库,redis是缓存数据库。
2、mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
3、mysql和redis因为需求的不同,一般都是配合使用。
mysql和redis的数据库类型,mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
@property装饰器 类静态属性装饰器。
Python装饰器的应用比较广泛,大部分场景的公共处理逻辑都可以使用装饰器去简化。(使用上类似于JAVA中的注解)一般比较常见的场景比如:
- 日志记录
- 权限验证
- 单例模式
- 竞争资源管理
RESTful API
用来开发 RESTful APIs 的库
Django
django-rest-framework:一个强大灵活的工具,用来构建 web API。
django-tastypie:为 Django 应用开发 API。
django-formapi:为 Django 的表单验证,创建 JSON APIs 。
Flask
flask-api:为 flask 开发的,可浏览 Web APIs 。
flask-restful:为 flask 快速创建 REST APIs 。
flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。
flask-api-utils:为 Flask 处理 API 表示和验证。
eve:REST API 框架,由 Flask, MongoDB 等驱动。
Pyramid
cornice:一个 Pyramid 的 REST 框架 。
与框架无关的
falcon:一个用来建立云 API 和 web app 后端的高性能框架。
sandman:为现存的数据库驱动系统自动创建 REST APIs 。
restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。
ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。
模板引擎
模板生成和词法解析的库和工具。
Jinja2:一个现代的,对设计师友好的模板引擎。
Chameleon:一个 HTML/XML 模板引擎。模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。
Genshi:Python 模板工具,用以生成 web 感知的结果。
Mako:Python 平台的超高速轻量级模板。
队列
处理事件以及任务队列的库。
celery:一个异步任务队列/作业队列,基于分布式消息传递。
huey:小型多线程任务队列。
mrq:Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。
rq:简单的 Python 作业队列。
simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。
————————————————
版权声明:本文为CSDN博主「唐僧不爱八戒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/python36/article/details/124154266
web应用处理请求的具体流程:
- 用户操作操作浏览器发送请求;
- 请求转发至对应的web服务器
- web服务器将请求转交给web应用程序,web应用程序处理请求
- web应用将请求结果返回给web服务器,由web服务器返回用户响应结果
- 浏览器收到响应,向用户展示
WSGI是Python应用程序或框架和Web服务器之间的一种接口规范
用以进行并发和并行操作的库。
multiprocessing:(Python 标准库) 基于进程的“线程”接口。
threading:(Python 标准库)更高层的线程接口。
eventlet:支持 WSGI 的异步框架。
gevent:一个基于协程的 Python 网络库,使用 greenlet。
Tomorrow:用于产生异步代码的神奇的装饰器语法实现。
uvloop:在 libuv 之上超快速实现 asyncio 事件循环。————————————————
pandas
hang转列:
1.设置索引、筛选单个字段,得到一个具有二级索引的Series
2.调用Series的unstack方法,得到一个DataFrame
3.rename_axis
4.reset_index
另外还有一个pd.pivot函数,可以让我们直接跳转到上面的第三步
一行变多行
1.如果该列里面的元素不是列表,那么变成列表
2.调用explode方法对该字段进行炸裂
一列变多列
1.如果该列的元素不是字典或列表,那么转成字典或列表
2.调用.applay(pd.Series),如果元素是字典,那么生成的列的名字就是字典的key。元素是列表,生成列默认0,1,2,3,4
如果元素是嵌套了字典的列表,南无一行便多行和一列变多列 可以结合起来使用,先explode。再apply
列转行
通过pd.melt 一步搞定,或者调用DataFrame的stack方法
列的对称合并
通过pd.lreshape 一步搞定,或者使用pd.melt 手动是西安
早期使用unstack和stack方法,后面使用pd.pivot 和 pd.melt 函数替代