首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flask请求是否在另一个请求开始之前运行到完成?

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

Stack Overflow用户
提问于 2013-01-08 03:38:35
回答 2查看 1.2K关注 0票数 3

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-08 04:09:03

最后,Flask应用程序是一个WSGI应用程序,这意味着它只是一个Python函数,如下所示……

代码语言:javascript
运行
复制
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.

Flask通过调用flask包中的一系列其他函数来实现此函数,这些函数最终会将控制权交给您。到那时,数据结构已经改变了,但整个过程只是一种轻松编写代码的方式,可以正确地实现这一功能。

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

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

因此,真正的答案与Flask无关,因为Flask只是一个使用WSGI协议编写的应用程序。WSGI protocol decision on Multi-Threading声明...

线程支持或缺少它也是依赖于服务器的。可以并行运行多个请求的服务器还应该提供以单线程方式运行应用程序的选项,以便不是线程安全的应用程序或框架仍然可以与该服务器一起使用。

因此,如果您确实希望在单线程模式下运行Flask应用程序,则需要查看特定的服务器和/或模块,了解WSGI应用程序是如何运行的。服务器/模块可能有办法将您的应用程序配置为在单线程中运行。

至于强制使用单线程系统并将项目存储在文本文件中是否是一个好主意,这是相当主观的。

票数 8
EN

Stack Overflow用户

发布于 2013-01-08 03:42:21

我相当确定,这是不能保证的。但是,这取决于您如何运行应用程序。例如,如果您使用的是Heroku+gunicorn,则在请求过程中更改的Heroku上的所有文件都不会被保留,也就是说,这些文件是短暂的。因此,如果您要更改文本文件,更改将不会持续到下一个请求。另一个提供者,PythonAnywhere,对他们的文件系统不是很严格,但是同样的,请求不能保证在下一个可以开始之前完成。此外,对于现代的web服务器来说,这将是一个无用的应用程序(或者更准确地说是服务器)。

另外,如果您想要一个小型数据库,只需使用sqlite即可。只要安装在系统上,python就会附带一个用于与之交互的库(如果我没记错的话)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14202844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档