zoukankan      html  css  js  c++  java
  • flask如何处理并发

    1、使用自身服务器的多进程或者多线程,参考werkzeug的run_simple函数的入参。注意,进程和线程不能同时开启

    2、使用gunicorn使用多进程,-w worker 进程数,类型于运行多个app.run()开发服务器

    gunicorn app -w 2 -b :8000

    3、使用gevent异步

    /usr/local/bin/gunicorn -t120 -w10  -b 10.57.17.57:3000 --worker-class gevent  Erebus:APP

    -k STRING, --worker-class STRING
                            The type of workers to use. [sync]

    -w INT, --workers INT
                            The number of worker processes for handling requests.
                            [1]

    -t INT, --timeout INT
                            Workers silent for more than this many seconds are
                            killed and restarted. [30]

    -b ADDRESS, --bind ADDRESS
                            The socket to bind. [['127.0.0.1:8000']]

    当运行开发服务器时,运行app.run(),你会得到一个单一的同步进程,这意味着一次最多只能处理1个请求。

    通过在其默认配置中坚持Gunicorn在它的前面,只是增加 – 工作,你获得的本质上是一些进程(由Gunicorn管理),每个行为像app.run()开发服务器。 4个worker == 4个并发请求。这是因为Gunicorn默认使用它包含的同步工作类型。

    重要的是要注意,Gunicorn还包括异步工作,即eventlet和gevent(和龙卷风,但是最好使用Tornado框架,似乎)。通过使用–worker-class标志指定其中一个异步工作者,您所获得的是Gunicorn管理多个异步进程,每个进程管理自己的并发。这些进程不使用线程,而是协同程序。基本上,在每个进程内,每次只能发生一件事情(1个线程),但是当对象在等待外部进程完成时(可以考虑数据库查询或等待网络I / O),它们可以被“暂停”。

    这意味着,如果你使用Gunicorn的异步工作者,每个工作者可以一次处理多个请求。只有多少工人是最好的取决于你的应用程序的性质,它的环境,它运行的硬件等等。更多的细节可以在Gunicorn’s design页和notes on how gevent works在其介绍页上找到。

  • 相关阅读:
    HDU4465 Candy
    《有关概率和期望问题的研究》读书笔记(完成度:40%)
    HDU5583 Kingdom of Black and White
    Gym100548F Color
    HDU6035 Colorful Tree
    Echarts笔记
    springMVC
    Struts2
    SSH框架学习中遇到的问题
    I/O流
  • 原文地址:https://www.cnblogs.com/shengulong/p/8111440.html
Copyright © 2011-2022 走看看