flask 单线程,python flask 多线程
Flask是一个web框架。
从客户端发送到服务器的请求和服务器处理请求的线程是什么关系?
例如,如果您发起10个请求,flask会打开多少个线程来处理这些请求?
Flask不会启动线程,那么谁来启动线程呢?
实际上,它是由一个外部服务器webserver启动的。我们的flask框架或者编写的项目代码,没有外部服务器是无法运行的。如果您想要项目运行,您必须有一个web服务器。所以我们看到的flask中的app.run()就是启动flask自带的内置webserver。如果要将代码部署到生产环境中,真正为用户所用,一般不会使用flask自带的webserver,而是选择另一个webserver来部署flask代码。
默认情况下,flask自己的web服务器在单个进程和单线程中响应我们的客户端请求。很容易认为,同事没有办法执行10个请求,只有在一个请求执行完之后,才能执行另一个请求。当然,flask自带的web服务器也可以开启多线程或者多进程模式。你可以在pycharm看到。
fromappimportcreate _ app
app=create _ app()if _ _ name _ _= _ _ main _ _ : # print( id is str(id(app)) start )
App.run (host= 0.0.0.0 ,debug=true) #单个进程和单线程
App.run (host= 0.0.0.0 ,debug=true,threadad=true) #单进程多线程,进程默认值为1
App.run (host= 0.0.0.0 ,debug=true,threadad=true,processes=2) #多进程多线程,process processes默认为1。对于一个网站来说,必须要有一定的承受并发的能力。Request只是一个变量名,真正的实例对象是request()。同时会有多个请求,每个请求的请求信息很可能是不同的。这将导致我们发送的实际请求信息不同。那么一个变量请求如何表示不同用户的请求信息呢?
由于单线程是按顺序执行的,因此它只能先处理一个请求,然后再处理另一个请求。对于单个线程,请求就像排队一样。请求进来后,flask将实例化一个请求对象,然后用请求加载我们的请求信息。此时,我们只有一个实例化的请求,所以,我们可以用请求变量名获得我们想要的请求信息,所以请求变量名将始终指向当前请求,请求中不会出现混淆。
多线程的请求,(对象是保存状态的地方)
怎么解决呢?
请求1=请求()
请求2=请求()
3=request()但是我们不知道到底会发生多少个请求,那么有没有一种所有的请求信息都用一个变量来表示呢?是的,它是一本字典。什么可以唯一标识一个线程,也就是线程的id号,可以作为一个键?烧瓶采用这一原理来解决这一问题。用不同的id号作为键,其实就是线程隔离,只是一种想法。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。