另一个请求开始之前Flask请求是否运行完成?

use*_*663 3 python flask

我问,因为我想知道我是否可以使用文本文件作为简单应用程序的数据存储.如果每个处理程序运行完成,那么看起来我应该能够在该请求期间修改文本文件而不用担心冲突,假设我在每个请求结束时关闭文件.

这可行吗?为了在Flask应用程序中将文本文件用作数据存储,我需要做些什么特别的事情吗?

Mar*_*eth 7

最后,Flask应用程序是一个WSGI应用程序,这意味着它只是一个看起来像这样的Python函数......

def simple_app(environ, start_response):
    # environ is a dict, start_response is a callable.
    # This function should call start_response, then return an iterable of strings
    # that make up the body of the response.
Run Code Online (Sandbox Code Playgroud)

Flask实现了这个功能,它调用了烧瓶包中的一堆其他功能,最终将控制权移交给你.到那时,数据结构已经发生了变化,但整个过程只是一种轻松编写正确实现这一功能的代码的方法.

此功能由Web服务器调用(有时使用某些模块,例如Apache 的modwsgi模块).当然,必须将这一个宏函数加载到Python的某个实例中才能被调用.

假设您的Web服务器有一个wsgi模块.当Web服务器启动时,该模块将创建一个最多包含四个线程的Python进程.当一个新请求进入时,它会抓取一个未使用的线程,并在其上调用上述函数.然后,仍然在该线程内调用Flask的所有其余部分和应用程序的代码.但是,另一个请求调用相同的函数,但现在在另一个线程中.这样做的原因是因为Flask明确地使得可以在这样的多线程模式下运行,但Flask实际上并不控制它是否在多个线程中运行.当然,一个进程和四个线程完全是任意的:您的服务器可以很好地使用多个进程和每个进程十几个线程.或者一个进程和一个线程.

因此,真正的答案与Flask无关,因为Flask只是一个使用WSGI协议编写的应用程序.关于多线程状态的WSGI协议决定 ......

线程支持或缺少线程支持也取决于服务器.可以并行运行多个请求的服务器还应该提供以单线程方式运行应用程序的选项,这样非线程安全的应用程序或框架仍可以与该服务器一起使用.

因此,如果您真的希望以单线程模式运行Flask应用程序,则需要查看特定服务器和/或模块以了解WSGI应用程序的运行方式.服务器/模块可能有一种方法可以将应用程序配置为在单个线程中运行.

关于强制单线程系统和将项目存储在文本文件中是一个好主意,这是非常主观的.