request -> response
uwsgi 可以粗略的理解为tomcat吧

pip install flask
学习目标

json APi
数据库CRUD
redis缓存
全局的异常处理

flask + gunicorn

$ gunicorn -w 4 myapp:app

flask + uwsgi 部署

uwsgi --http 0.0.0.0:8000 --wsgi-file flask_uwsgi.py --callable app --master

flask_uwsgi.py

from app import appif __name__ == "__main__":app.run()

app.py

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()

学习flask

我确实是从spring来考虑flask的,比如某个功能在spring中是存在的,那么flask要怎么实现呢?

  1. 第一步创建一个flask应用
from flask import Flask
app = Flask(__name__)
if __name__ == "__main__"app.run()
  1. 路由配置规则
    获取url中的值
    获取参数中的值
    指定方法
  2. 模版渲染
  3. 在request之前和之后before_request/ after_request
    很像spring里面的拦截器,比如可以在这里进行登录验证
  4. http状态相关
    redirect
    abort
  5. 一些自己可以丰富的功能
    To register an error handler, use the errorhandler() decorator.

7.The Application Context

flask 背后的故事

访问不同视图处理函数和多个用户访问同一个视图处理函数,faslk对应方式有变化吗?
flask 不同view函数的handler1, handler2使用request
可以参考理解java里面的threadLocal

Python中获得Thread Local的两种方法
「第一种方法」
使用Python自带的threading.local线程局部变量。
问题:它只支持在线程之间作为局部变量

「第二种方法」
使用Werkzeug实现的werkzeug.local.Local类,它的优势在于支持在协程之间作为局部变量。他会优先使用Greenlet的ID而不是现成的ID来保存状态词典。

简单的翻看flask代码,初步的认识是flask是一层包装,在她之下是werkzeug, jinja2

app.run() 在这里是简单的调用了werkzeug的run_simple(), 而run_simple使用的是socket.listen(128)

流程
http -> wsgi server -> application
application模型如下

def application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/plain')])return ['Hello World!']
  1. wsgi server这里是怎么处理多个请求的?多进程?多线程?单进程,单线程,异步io
def run_simple(hostname, port, application, use_reloader=False,use_debugger=False, use_evalex=True,extra_files=None, reloader_interval=1,reloader_type='auto', threaded=False,processes=1, request_handler=None, static_files=None,passthrough_errors=False, ssl_context=None):

可以通过os.getpid()查看进程id
注意 debugger为False时候, threaded=True才生效
run_simple(‘127.0.0.1’, 5000, app, use_debugger=False, use_reloader=True, processes=1, threaded=True)

通过threading.currentThread().ident查看线程id
2. from flask import request,这里的request在不同线程中为什么不会相互干扰?

python-flask-uwsgi体验相关推荐

  1. uwsgi+python+flask+nginx服务器部署

    flask+uwsgi+nginx 服务器 安装centos7系统 1. 系统选择CentOS系统就好(推荐选择CentOS7系统) 2. 用户名:root 3. 密码自己设定(自己记住) 安装宝塔面 ...

  2. python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问

    python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问 B站配套视频教程观看 uwsgi多进程配置 uwsgi.ini配置 nginx和uwsgi通过配置文件s ...

  3. 树莓派构建内网域名访问php/python 多个虚拟web主机 bind9 nginx flask uwsgi pfm php7 python3

    文章目录 0 前言 1 php安装 2 nginx安装 3 python3安装 4 php web设置与测试 5 flask uwsgi 设置与测试 5.1 安装flask 5.2 安装uwsgi 5 ...

  4. python flask快速入门与进阶 百度云_Python Flask快速入门与进阶

    课程目录 1-1 Python Flask快速入门与进阶.mp4 2-1 windows环境安装开发环境 (上).mp4 2-2 windows环境安装开发环境 (下).mp4 2-3 配置开发环境. ...

  5. python flask实现博客系统_基于Flask的博客网站设计与实现

    涂远杰 郑剑 摘要:该博客系统是一款分享型博客,注重个人的学习心得.生活等方面的记录.后台基于Python中的Flask框架开发,还涉及爬虫,数据库使用的是轻型的SQLite,同时,前端页面的实现涉及 ...

  6. python开源项目博客_Blog_mini首页、文档和下载 - Python Flask开源博客 - OSCHINA - 中文开源技术交流社区...

    使用Blog_mini,你完全不用担心博客的管理问题! Blog_mini是一个用Python Flask开发的,拥有简洁页面(支持响应式布局!)和强大后台管理功能的开源博客系统,使用Blog_min ...

  7. Build Docker image of a Python Flask app【转载】

    原文地址:https://stackoverflow.com/questions/41750366/build-docker-image-of-a-python-flask-app I'm tryin ...

  8. python flask安装_python flask安装和命令详解

    Flask Web开发实战学习笔记 Flask简介 Flask是使用Python编写的Web微框架.Web框架可以让我们不用关 心底层的请求响应处理,更方便高效地编写Web程序.因为Flask核心简 ...

  9. python自动化测试平台github_GitHub - DangKaio/FXTest: 接口自动化测试平台——python+flask版,支持http协议...

    FXTest测试平台 flask + Python3 实现的API自动化测试平台. 下面有介绍python flask部署相关的文章链接.为自己部署的记录文章 前后端开始进行分离,通过接口进行交互 敬 ...

  10. Flask+uwsgi+Nginx环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 开源软件准备 需要的软件列表: setuptools-33.1.1.zip Python-2.7.13.tgz pip-9.0 ...

最新文章

  1. rocksdb报错解决:librocksdb.a(format.o): In function `Zlib_Uncompress':
  2. 报名丨24小时创新挑战:数字时代的人类健康与福祉
  3. python字符串之查找与替换_Python字符串操作(查找,替换,分割和连接)方法及其使用...
  4. ITK:读取网格并显示2个给定顶点之间的欧几里得距离
  5. 队列的定义与操作-顺序存储,链式存储(C语言)
  6. 备份下ionic升级
  7. 余额宝技术架构及演进
  8. not1,not2,bind1st,bind2nd
  9. md5是什么_全民小视频视频修改md5有什么用6
  10. 2017CV技术报告:从3D物体重建到人体姿态估计
  11. 怎么把video文件改成mp4_怎么将MP4视频转换成EXE格式?
  12. hardware用u盘起动_u盘启动dos最简单的的小方法
  13. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分+优先队列)
  14. 双排桩弯矩Matlab求解程序,考虑开挖过程椅式双排桩内力及变形分析
  15. 【GAMES101】课堂笔记1--计算机图形学概述
  16. 珍藏的PS技巧(可以尝试一下哦)(转载)
  17. Spring中Autowired注解到底怎么实现的
  18. 大场景室内点云标注数据集S3DIS介绍
  19. 2018年常见的13种APP推广方法 最后一种运营者必看
  20. 抽象类或接口的实例化问题

热门文章

  1. CSS——CSS创建样式表
  2. dd命令安装Linux
  3. 类进阶学习目标 java 1614957028
  4. 泛型数组 List c# 1613647847
  5. 配置MyEclipse的版本为jdk1.7
  6. 前端开发 字体样式的演练0229
  7. Linux 比较不同命令
  8. shell 脚本编程的10 个最佳实践
  9. [转帖]每天看一遍,释怀所有难过
  10. 用IMAP4访问Exchange邮箱:Exchange2003系列之七