python模型训练框架_深度学习⽹络模型部署——知识储备
python常⽤框架(⼆)
实现从项⽬调研、数据收集、数据预处理、深度卷积神经⽹络训练再到服务器部署的⼈脸表情识别⼩项⽬
⼀、python常⽤框架
1、Django: Python Web应⽤开发框架,路由系统、视图和模板(简单介绍)
2、Diesel:基于Greenlet的事件I/O框架
3、Flask:⼀个⽤Python编写的轻量级Web应⽤框架
4、Cubes:轻量级Python OLAP框架
5、Kartograph.py:创造⽮量地图的轻量级Python框架
6、Pulsar:Python的事件驱动并发框架
7、Web2py:全栈式Web框架
8、Falcon:构建云API和⽹络应⽤后端的⾼性能Python框架
9、Dpark:Python版的Spark
10、Buildbot:基于Python的持续集成测试框架
11、Zerorpc:基于ZeroMQ的⾼性能分布式RPC框架
12、Bottle: 微型Python Web框架
13、Tornado:异步⾮阻塞IO的Python Web框架,Tornado框架的基本组成
14、webpy: 轻量级的Python Web框架
15、Scrapy:Python的爬⾍框架
想了解具体框架详情,请跳转:Python框架
⼆、了解Flask框架(轻量级Web应⽤框架)
Flask是⼀个使⽤Python编写的轻量级Web应⽤框架。基于Werkzeug WSGI⼯具箱和Jinja2 模板引擎。
Flask使⽤BSD授权。 Flask也被称为“microframework”,因为它使⽤简单的核⼼,⽤extension增加其他功能。
Flask框架⽬录:
```
flask-demo/├ run.py # 应⽤启动程序 ├ config.py # 环境配置 ├ # 列出应⽤程序依赖的所有Python 包 ├ tests/# 测试代码包 │ ├ __init__.py │ └ test_*.py # 测试⽤例 └ myapp/├ admin/# 蓝图⽬录 ├static/│ ├css/# css⽂件⽬录 │ ├ img/# 图⽚⽂件⽬录 │ └ js/# js⽂件⽬录 ├ templates/# 模板⽂件⽬录 ├ __init__.py ├ forms.py # 存放所有表单,如果多,将其变为⼀个包 ├ models.py # 存放所有数据模型,如果多,将其变为⼀个包 └
views.py # 存放所有视图函数,如果多,将其变为⼀个包
```
Flask没有默认使⽤的数据库、窗体验证⼯具。然⽽,Flask保留了扩增的弹性,可以⽤Flask-extension加⼊这些功能:ORM、窗体验证⼯具、⽂件上传、各种开放式⾝份验证技术。
client & server
Flask扩展包:
Flask-SQLalchemy:操作数据库;
Flask-migrate:管理迁移数据库;
Flask-Mail:邮件;
Flask-WTF:表单;
Flask-script:插⼊脚本;
Flask-Login:认证⽤户状态;
Flask-RESTful:开发REST API的⼯具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化⽇期和时间;
Flask程序运⾏过程:
所有Flask程序必须有⼀个程序实例。
Flask调⽤视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。⼀般情况下,响应内容主要是字符串和状态码。
⽤户向浏览器发送http请求,web服务器把客户端所有请求交给Flask程序实例,程序⽤Werkzeug来做路由分发,每个url请求,到具体的视图函数。路由的实现是通过route装饰器实现的,调⽤视图函数,获取数据后,把数据传⼊模块中,模块引擎渲染响应的数据,由Flask 返回给浏览器。
模板的基本语法:
通过修改⼀下前⾯的⽰例,来学习下模板的简单使⽤:
Flask数据库:
Web应⽤中普遍使⽤的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表⽤来给应⽤的实体建模,表的列数是固定的,⾏数是可变的。它使⽤结构化的查询语⾔。关系型数据库的列定义了表中表⽰的实体的数据属性。⽐如:商品表⾥有name、price、number 等。
Flask本⾝不限定数据库的选择,你可以选择SQL或NOSQL的任何⼀种。也可以选择更⽅便的SQLALchemy,类似于Django的ORM。SQLALchemy实际上是对数据库的抽象,让开发者不⽤直接和数据库打交道,⽽是通过Python对象来操作数据库,在舍弃⼀些性能开销的同时,换来的是开发效率的较⼤提升。
SQLALchemy是⼀个关系型数据库框架,它提供了⾼层的ORM和底层的原⽣数据库的操作。flask-sqlalchemy是⼀个简化了SQLALchemy操作的flask扩展。
三、了解Tornado框架(异步⾮阻塞IO的Python Web框架)
Tornado(龙卷风)和Django⼀样是Python中⽐较主流的web框架,Tornado 和现在的主流 Web 服务器框架也有着明显的区别:Tornado⾃带socket,并且实现了异步⾮阻塞并对WebSocket协议天然⽀持;、
django怎么学
Tonado由路由系统、视图、静态⽂件、模板语⾔4⼤部分组成。
Tornado有2⼤特⾊:原⽣⽀持WebSocket协议、异步⾮阻塞的Web框架
1、WebSocket协议
HTTP和WebSocket协议都是基于TCP协议的,不同于HTTP协议的是WebSocket和服务端建⽴是长连接且连接成功之后,会创建⼀个全双⼯通道,这时服务端可以向客户端推送消息,客户端也可以向服务端推送消息,其本质是保持TCP连接,在浏览器和服务端通过Socket 进⾏通信,由于WebSocket协议建⽴的是双向全双⼯通道,所以客户端(浏览器)和服务端(Web框架)双⽅都要⽀持WebSocket协议,Tornado原⽣⽀持这种协议;
2、异步⾮阻塞介绍
Web框架分阻塞式和异步⾮阻塞2种;
2.1.阻塞式IO(Django、Flask、Bottle)
⼤多数的Web框架都是阻塞式的,体现在1个请求到达服务端如果服务端未处理完该请求,后续请求⼀直等待;
解决⽅案:
开启多线程/多进程:多个线程提⾼并发;
缺点:浪费系统资源
2.2、Tornado异步⾮阻塞(Tornado/NodeJS)
异步⾮阻塞就是在服务端结合IO多路复⽤select/poll/epoll模板,做到1个线程在遇到IO操作的情况下,还可以做⼀些其他的任务;Tornado默认是阻塞的同时也⽀持异步⾮阻塞功能;
Tornado异步⾮阻塞=IO多路复⽤(循环检查socket是否发⽣变化)+携程(哪个有变化?就切换到那个socket!)
1.客户端发送请求如果请求内容不涉及IO操作(连接数据、还得去其他⽹站获取内容)服务端直接响应客户端;
2.如果请求内容涉及IO操作,服务端把本次连接的socket信息添加到socket监听列表中监听起来;
然后去连接其它socket(数据库、其它站点)由于是不阻塞的所以服务端把这次发送socket信息也监听起来;(⼀直循环监听,直到socket监听列表中的socket发⽣变化)
3.把socket全部监听之后,就可以去继续接收其它请求了,如果检测到socket监听列表中的socket有变化(有数据返回),到对应socket响应数据,并从socket监听列表中剔除;
3、Tornado Web服务
TensorFlow模型的计算图,⼀般输⼊的类型都是张量,你需要提前把你的图像、⽂本或者其它数据先进⾏预处理,转换成张量才能输⼊到模型当中。⽽⼀般来说,这个数据预处理过程不会写进计算图⾥⾯,因此当你想使⽤TensorFlow Serving的时候,需要在客户端上写⼀⼤堆数据预处理代码,然后把张量通过gRPC发送到serving,最后接收结果。现实情况是你不可能要求每⼀个⽤户都要写⼀⼤堆预处理和后处理代码,⽤户只需使⽤简单POST⼀个请求,然后接收最终结果即可。因此,这些预处理和后处理代码必须由⼀个“中间⼈”来处理,这个“中间⼈”就是Web服务。
我们使⽤Tornado框架来搭建我们的Web服务,Tornado是⼀个⽀持异步⾮阻塞的⾼性能Web框架,可以接收多个⽤户的并发请求,然后向TensorFlow Serving并发请求结果,并在其中承担所有的数据预处理、后处理任务。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论