gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:42 26 4
gpt4 key购买 nike

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

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

最佳答案

最后,一个 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.

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

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

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

所以,真正的答案与 Flask 无关,因为 Flask 只是一个使用 WSGI 协议(protocol)编写的应用程序。 WSGI protocol decision on Multi-Threading状态...

Thread support, or lack thereof, is also server-dependent. Servers that can run multiple requests in parallel, should also provide the option of running an application in a single-threaded fashion, so that applications or frameworks that are not thread-safe may still be used with that server.

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

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

关于python - Flask 请求是否在另一个请求开始之前运行完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com