全局列表在python中显示为空

时间:2014-12-26 11:00:27

标签: python django global-variables

我已经声明了这样的全局列表feature_array,然后在get_features(request)函数中初始化它:

feature_array = []


def get_features(request):

    selected_product_id = request.session['product_id']

    all_features = Feature.objects.filter(product_id = selected_product_id)

    global feature_array
    feature_array = list(all_features)

现在我想在另一个函数中删除列表的第一个索引,但IndexError: list assignment index out of range出现了,尽管我已经在get_features函数中初始化了它。以下是我删除列表的第一个索引的方法。我想它会得到一个空列表,这就是为什么它无法访问第一个索引。

def process_features_ajax(request):
    global feature_array
    del feature_array[0]

更新

这就是我调用get_features(request)函数

的方法
(customer_comments, request) = get_features(request)

2 个答案:

答案 0 :(得分:0)

如果您在分叉模型 WSGI环境中运行,则不能依赖于共享全局变量。

为了处理请求,分叉模型服务器将创建新的子进程。这些继承了父进程内存,在分叉之后,请求之间不再共享全局变量。不要依赖全局变量并使用数据库或内存缓存进程(memcached或redis)。

答案 1 :(得分:0)

正如Martijn所说,绝对不能使用全局变量在多进程环境中的请求之间存储状态。除了您已经看到的问题之外,还存在多个用户的额外问题:显然,对于全局变量,每个人都可以访问相同的值,这可能是正确的。

在Django中做这样的事情的方法是使用会话。您已经在产品ID中使用它:您还应该存储所需功能的ID,并根据需要修改该列表。