Django会话变量有时会在多线程环境中丢失

时间:2016-04-15 15:49:12

标签: django multithreading session thread-safety gevent

我试图通过将每个字符串存储在自己的变量中并使用django.contrib.session来为每个会话缓存一组字符串。

我有以下代码:

import copy

def get_result(request, operation):
    previous_result = request.session.get(operation.name)
    if previous_result:
        result = copy.deepcopy(previous_result)
    else:
        result = get_json_response(operation)
        request.session[operation.name] = copy.deepcopy(result)
    return result

get_result()是

  1. 通过ajax请求触发
  2. 用于可以同时调用的许多不同操作
  3. 可以在一个会话中每次操作多次调用
  4. 此代码在我的本地环境中完美运行。但是,在安装了gevent和chausette的生产服务器中,它会失败。

    大多数情况下,request.session.get(operation.name)将返回None,即使它不是第一次为该操作调用get_result时也是如此。在某些情况下,它会返回一个值,但在某些情况下,它不会返回。似乎没有任何模式,它什么时候起作用,并且不起作用。

    我怀疑不一致是因为不同的线程在不同的状态引用会话变量。在这种情况下处理会话变量的正确方法是什么?

0 个答案:

没有答案