zoukankan      html  css  js  c++  java
  • Django Flask是多线程应用吗?

    1.首先Django和Flask是一个Web框架,并不是一个应用

    2.既然是一个框架就不存在多线程应用的说法,即使是通过框架研发的应用也不是多线程的。

    3.为什么本地开发和测试中可以并发处理多个请求?

    3.1 Django官网文档:https://docs.djangoproject.com/en/3.2/ref/django-admin/

    本地开发环境是通过 manage.py runserver 启动的,默认是启动的多线程服务,如果想关闭可以使用下方参数 --nothreading

    3.2 Flask中的app.run 是启动的单进程服务,不过可通过threaded=True 和processes=2 这两个参数开启多进程或多线程,多进程和多线程是不能同时开启的。

    4.生产环境需要使用哪种技术处理并发?

    最常见的就是Nginx + uWSGI + Django/Flask应用 架构

    客户端 <-> web 服务器(Nginx 为例) <-> socket <-> WSGI(uWSGI为例) <-> Django
    中间的 WSGI 一层可以换成任意遵循 WSGI 的程序,比如常见的两种 Gunicorn 以及 uWSGI
    Django 具体怎么支持并发的请求,取决于 WSGI 程序的实现

    uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 # This will spawn 4 processes (each with 2 threads)

    流程:

    首先客户端请求服务资源,Nginx作为直接对外的服务接口,接收到客户端发送过来的请求,会解包、分析,
    如果是静态文件请求就根据Nginx配置的静态文件目录,返回请求的资源,
    如果是动态的请求,Nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将根据请求调用Django工程的某个文件或函数,

    处理完后Django将返回值交给uWSGI,

    uWSGI接收后转发给Nginx,Nginx最终将返回值返回给客户端(如浏览器)。
    *注:不同的组件之间传递信息涉及到数据格式和协议的转换
    作用:
    1. 第一级的Nginx并不是必须的,uWSGI完全可以完成整个的和浏览器交互的流程;
    2. 在Nginx上加上安全性或其他的限制,可以达到保护程序的作用;
    3. uWSGI本身是内网接口,开启多个work和processes可能也不够用,而Nginx可以代理多台uWSGI完成uWSGI的负载均衡;
    4. Django在debug=False下对静态文件的处理能力不是很好,而用Nginx来处理更加高效。

    5.Django使用的wsgiref库, Flask使用的werkzeug库实现的本地开发环境启动Web Server。

    参考:

    https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html?highlight=threads
    https://docs.djangoproject.com/en/3.2/ref/django-admin/
    https://www.zhihu.com/question/56472691/answer/293292349
    https://blog.csdn.net/c465869935/article/details/53242126

  • 相关阅读:
    和园友们聊聊天
    php编写验证码
    面试题复习记录(二)
    面试题复习记录(一)
    正则表达式学习小记
    javascript学习小记(一)
    大四
    Java小应用程序
    明白这十个故事-->你也就参悟了人生
    Hibernate懒加载深入分析
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/15467141.html
Copyright © 2011-2022 走看看