首页 > 解决方案 > 当我们使用 gunicorn 运行烧瓶请求时,它不是线程安全的

问题描述

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

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

我正在用 gunicorn 运行我的服务器gunicorn application:app --workers 1 --threads 12 -b 0.0.0.0:5000

现在,如果我发出多个并行请求,那么它会将一个用户信息返回到另一个用户请求的响应中。假设我对用户发出并行请求AB然后C将用户的信息发送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

标签: python-3.xflaskgunicornflask-restplus

解决方案


推荐阅读