我已经声明了这样的全局列表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)
答案 0 :(得分:0)
如果您在分叉模型 WSGI环境中运行,则不能依赖于共享全局变量。
为了处理请求,分叉模型服务器将创建新的子进程。这些继承了父进程内存,在分叉之后,请求之间不再共享全局变量。不要依赖全局变量并使用数据库或内存缓存进程(memcached或redis)。
答案 1 :(得分:0)
正如Martijn所说,绝对不能使用全局变量在多进程环境中的请求之间存储状态。除了您已经看到的问题之外,还存在多个用户的额外问题:显然,对于全局变量,每个人都可以访问相同的值,这可能是正确的。
在Django中做这样的事情的方法是使用会话。您已经在产品ID中使用它:您还应该存储所需功能的ID,并根据需要修改该列表。