【发布时间】:2020-01-20 22:56:37
【问题描述】:
我运行 Django 1.11.20。我刚刚(终于)从 Python 2.7 跳到了 3.7。
我注意到自从升级到 Python 3 后,清除缓存后的第一个页面加载非常慢。到目前为止,我的开发机器上只有我的 Python 3 环境,所以我在使用 ./manage.py runserver 和 FileBasedCache 后端时遇到了这种情况。我不知道我是否会在生产堆栈(nginx、uwsgi、redis 等)上遇到同样的事情。
我正在使用 Django 调试工具栏,它为我提供了一些关于问题不是的提示,但我不确定应该从哪里查看问题所在。
在我的开发机器上的 Python 2.7 环境中,调试工具栏运行加载一个带有空缓存的简单页面的时间是:
- CPU:4877.89ms
- SQL 462.41 毫秒
- 缓存:1154.54ms
调试工具栏给出的时间在我的开发机器上的 Python 3.7 环境中运行加载具有空缓存的同一页面是:
- CPU:91661.71ms
- SQL 350.44 毫秒
- 缓存:609.65ms
(我在这台开发机器上使用基于文件的缓存,所以当我说“使用空缓存”时,我的意思是我在浏览器中加载 URL 之前rm -r cache。)
因此升级后 SQL 和缓存时间稍微加快了一点,但 CPU 时间翻了一番。当我在调试工具栏中打开“时间”面板时,我看到增加的“时间属性”是“请求”。
同样的事情发生在每个页面上(包括由TemplateView 生成的 HTML 页面,所以它们没有做任何棘手的事情),但只有在第一次从空缓存加载时才会发生。在第一次响应之后,所有页面都恢复到与 Python 2 环境中大致相同的响应时间。所以这与初始请求有关。
我不确定在哪里可以尝试找出 Django 仅在第一个请求时在做什么。任何指针?或者有什么明显的东西可以让我在从 Python 2.7 到 3.7 的过程中变慢?
【问题讨论】:
-
您是如何将 Python-2.x 程序转换为 Python-3.x 的?
-
我使用了 python-futurize。这是在两种环境中运行的相同代码库。
标签: python django python-3.7 django-debug-toolbar