python - l[ :] performance problem

标签 python django

最近我正在调试如下代码

def getList():
    #query db and return a list
    total_list = Model.objects.all()
    result = list()
    for item in total_list:
        if item.attr1:
            result.append(item)
    return result


# in main code    
org_list = getList()
list = orgList[:]#this line cause cpu problems.

if len(org_list)>0 and org_list[0].is_special:
    my_item = org_list[0]

for i in list:
    print_item(i)

doSomethingelse(list[0])

为了简化代码,我更改了大部分代码,但主要部分在这里。

在 getList 方法中,我们查询数据库并获取 20~30 行。然后我们从中创建一个 python 列表并返回它。 在 main 方法中,我们从 getList 方法获取 org_list 变量 并用 orgList[:] 对其进行切片

并循环此列表并调用其上的特定元素,例如 list[0]

这里的问题是,这段代码运行在一个非常繁忙的服务器上,不幸的是它使用了大部分CPU并最终锁定了我们的服务器。 这里的问题是我们用 list[:] 切片 list varibale 的行 如果我们不这样做而只使用 org_list 变量,我们的服务器就不会出现问题。有没有人知道为什么会发生这种情况。切片会占用大量 cpu 或当我们使用切片列表时。它使用大量CPU吗?

最佳答案

您显示的代码将在引发异常所需的 0.1 微秒内运行:

org_list = getList()
list = orgList[:]#this line cause cpu problems.

orgList 应为 org_list。显示实际重现问题的最少代码。

此外,这还会终止 list 内置函数。不要这样做。

更新另一个想法:对“我的 Django 应用程序运行缓慢!”的常见 react 是“关闭调试标志”...显然它不会在 Debug模式下释放内存。

更新2关于“”“我发现当你对列表进行切片时。它实际上充当该列表的 View ,只需调用原始列表方法即可获取实际项目。”“”在哪里你明白了吗?普通的旧列表不可能是这种情况!您是否在某处重新定义了 list

在您的 getList 函数中:

(1) 输入打印类型(列表)

(2) 将 result = list() 替换为 result = [] 并查看问题是否消失。

关于python - l[ :] performance problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4763708/

相关文章:

python - 如何在 Python 的另一个函数中找出特定函数参数的默认值?

Python嵌套for循环不会在第一个循环的第二次迭代中执行第二个for循环

python - 用于没有模型的对象的 Graphite 烯解析器

javascript - Django-CKEditor 小部件未动态加载

python - 使用 pandas 和 python 读取重复的数据 block

python - 如何判断等待事件是否超时?

python - 您如何为具有多个 python 包的项目定义/组织 proto 文件?

Django:缓存图像

python - 如何将 NSDictionary 发布到 Django 服务器

django - 如何为 django-graphene 中的错误返回自定义 JSON 响应?