微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我们使用 gunicorn 运行时,flask 请求不是线程安全的

如何解决当我们使用 gunicorn 运行时,flask 请求不是线程安全的

我正在运行一个 Flask 应用程序并使用 Flask-RESTPlus 作为构建 REST API 的扩展。

我有一个用户 API,它从 postgres 中检索用户信息,并读取相关信息 Redis 并发回客户端。

我使用 gunicorn 来运行我的服务器,例如 gunicorn application:app --workers 1 --threads 12 -b 0.0.0.0:5000

现在,如果我发出多个并行请求,那么它会将一个用户信息返回到另一个用户请求的响应中。 假设我向用户 ABC 发出并行请求,那么它会将用户 A 的信息发送到请求 B 的响应中。

如果我删除 --threads 12 那么它工作正常。

我有一个庞大的代码库,所以无法添加它,但提取了一些有用的代码,以便你们可以想象它

@USER_API.route("/<string:user_id>")
class UserResource(Resource):
  def get(self,user_id):
    # fetch user from DB
    user = User.find(user_id)
    keys = ["address","office","xyz"]
    relations = [
            json.loads(fleet) for fleet in list(filter(bool,r.mget(*keys)))
        ]
    # call function to add redis datta into user obj
    user = add_relation_to_user_obj(user,relations)
    return user

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?