相关疑难解决方法(0)

烧瓶中的全局变量是否安全?如何在请求之间共享数据?

在我的应用程序中,通过发出请求来更改公共对象的状态,响应取决于状态.

class SomeObj():
    def __init__(self, param):
        self.param = param
    def query(self):
        self.param += 1
        return self.param

global_obj = SomeObj(0)

@app.route('/')
def home():
    flash(global_obj.query())
    render_template('index.html')
Run Code Online (Sandbox Code Playgroud)

如果我在我的开发服务器上运行它,我希望得到1,2,3等等.如果同时向100个不同的客户提出请求,可能出现问题吗?预期的结果是100个不同的客户端每个都看到1到100之间的唯一数字.或者会发生这样的事情:

  1. 客户端1查询.self.param增加1.
  2. 在可以执行return语句之前,线程切换到客户端2. self.param再次递增.
  3. 线程切换回客户端1,然后客户端返回数字2,比如说.
  4. 现在线程移动到客户端2并返回他/她的数字3.

由于只有两个客户端,预期结果为1和2,而不是2和3.跳过了一个数字.

当我扩展我的应用程序时,这会发生吗?我应该看一下全局变量的替代方案?

python thread-safety flask

70
推荐指数
4
解决办法
2万
查看次数

使用 Keras + Flask 蓝图时容器本地主机不存在错误

我正在尝试使用 Flask 的蓝图通过 API 提供机器学习模型,这是我的烧瓶__init__.py文件

from flask import Flask

def create_app(test_config=None):
    app = Flask(__name__)

    @app.route("/healthcheck")
    def healthcheck() -> str:
        return "OK"

    # Registers the machine learning blueprint
    from . import ml
    app.register_blueprint(ml.bp)

    return app
Run Code Online (Sandbox Code Playgroud)

ml.py包含/ml端点蓝图的文件

import numpy as np
from . import configuration as cfg
import tensorflow as tf

from flask import (
    Blueprint, flash, request, url_for
)


bp = Blueprint("ml", __name__, url_prefix="/ml")
keras_model = None
graph = None

@bp.before_app_first_request
def load_model():
    print("Loading keras model") …
Run Code Online (Sandbox Code Playgroud)

python flask keras

6
推荐指数
1
解决办法
5902
查看次数

将变量附加到 app 与 Flask 中的 current_app 相同吗?

与这个问题类似,我想在整个 Flask 应用程序(所有请求)之间共享一个变量。

我正在编译一个大数据文件(相当大的开销),并且希望尽可能少地进行编译 - 将结果存储在变量中,以便以后可以访问它。使用将flask.g不起作用,因为它在请求之间被擦除干净。

六年前,Armin Ronacher(Flask 的创建者)在Reddit 帖子中说道:

您可以将其附加到应用程序对象并通过 访问它 flask.current_app.whatever_variable

这是我的两个问题:

A) 这仍然是推荐的做法吗?

B) 这两种方法(附加到应用程序工厂current_appapp应用程序工厂内部)是否等效?

使用current_app

from flask import current_app
current_app.my_var = <<file>>
Run Code Online (Sandbox Code Playgroud)

使用应用程序工厂

def create_app(config_filename):
    app = Flask(__name__)
    app.config.from_pyfile(config_filename)
    app.my_var = <<file>>
    ...
    return app
Run Code Online (Sandbox Code Playgroud)

python flask

6
推荐指数
1
解决办法
1367
查看次数

在 Python Flask 中:存储数据的合适位置是什么?

根据在flask.request上存储每个请求数据是否安全?g对象似乎是请求本地的(= 具有单个请求的生命周期)。也许我误解了这个答案,但 Flask 文档指出该g对象将是全局的,这似乎与这个答案相矛盾。

文档本身关于这些细节有点短,所以请您介意向上下文和全局对象解释细节g吗?具体解决以下问题:

  1. 为了在单个请求的生命周期内存储数据,该如何做?(使用request对象,g对象还是哪种对象?)
  2. 为了在应用程序生命周期内存储数据,应该如何做?(使用app对象,g对象还是哪种对象?)
  3. Flask 可用于多进程环境。假设在这种操作模式下会有多个应用程序范围的对象是否正确?(这意味着所有这些appg对象都需要在每个工作进程的生命周期内单独初始化。)
  4. 与问题 3 相关:如果我需要一个应用程序范围的、类似单例的对象来为 Flask Web 应用程序提供服务,是否必须将此服务分解到外部进程中?(在多进程操作模式中不会有一个类似单例的实例?)

python flask

4
推荐指数
1
解决办法
6310
查看次数

标签 统计

flask ×4

python ×4

keras ×1

thread-safety ×1