Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 谷歌上的Django:如何表现_Python_Django_Google App Engine_Python 2.7_Google Cloud Sql - Fatal编程技术网

Python 谷歌上的Django:如何表现

Python 谷歌上的Django:如何表现,python,django,google-app-engine,python-2.7,google-cloud-sql,Python,Django,Google App Engine,Python 2.7,Google Cloud Sql,几周前我问过。今天,我实际编写并发布了一个标准的Django应用程序,即一个由支持的全功能关系数据库(因此也是全功能的Django admin)。我唯一一次不得不偏离标准Django方式的做法是发送电子邮件(必须采用GAE方式)。我的设置是gae1.6.4,Python2.7,Django 1.3,使用app.yaml中的以下命令: libraries: - name: django version: "1.3" 但是,我确实需要您建议明确的可操作步骤,以提高此Django应用程序在寒冷时

几周前我问过。今天,我实际编写并发布了一个标准的Django应用程序,即一个由支持的全功能关系数据库(因此也是全功能的Django admin)。我唯一一次不得不偏离标准Django方式的做法是发送电子邮件(必须采用GAE方式)。我的设置是
gae1.6.4
Python2.7
Django 1.3
,使用
app.yaml
中的以下命令:

libraries:
- name: django
  version: "1.3"
但是,我确实需要您建议明确的可操作步骤,以提高此Django应用程序在寒冷时的初始请求响应时间。我在GAE上有一个简单的
webapp2
网站,它不会影响数据库,当寒冷时响应时间为
1.56s
。Django one在冷态时,通过两个查询(两个
count(*)
查询,每个表包含少于300行),命中DB,响应时间为
10.73s
!不鼓励使用主页;)

我想到的是删除我不需要的
中间件
类和其他Django特定的优化。然而,从GAE的角度改进事情的技巧将非常有用


N.B.我不希望这成为关于在GAE上选择Django的优点的讨论。我可以提到,与其他框架相比,我个人的Django专业知识以及由此产生的开发生产力在采用Django方面确实起到了相当大的作用。此外,使用CloudSQL,很容易摆脱GAE(希望不是!),因为Django代码在其他任何地方都可以工作,只需很少(或没有)修改。可以找到与此主题相关的讨论。

当没有实例运行时,例如在版本升级后或15分钟内没有请求时,请求将触发加载一个实例,大约需要10秒。所以你所看到的是正常的

因此,如果你的应用程序空闲时间超过15分钟,你就会看到这种行为。一个解决方法是每10分钟为你的实例ping一次(尽管我相信谷歌不喜欢这样)

更新:


您可以通过启用计费来避免这种情况,然后在GAE管理中的“应用程序设置”下将
minimum
Idle Instances设置为1。注意:
min
设置在免费应用程序上不可用,仅在
max
上可用

我没有一个完整的答案,但我也在努力,因为我也想找到一个解决方案。我目前正在使用一个正在运行的cron作业(我实际上需要cron作业,所以它不仅仅是为了让我的应用程序保持活动状态)

我在GAE/Python/Django相关邮件列表中看到,与webapp相比,加载所有Django文件所需的时间非常重要,因此从部署中删除不使用的Django组件也可以缩短启动时间。通过删除contrib文件夹的某些部分,我可以节省大约3秒钟的时间。我在app.yaml中排除了它们

我的启动时间仍然在6秒左右(完整应用程序,Django Norel,HRD)。当我的应用程序更简单时,它更像是4

我怀疑Django会在启动时验证其所有模型,并且处理时间很长。如果你有时间尝试一款绝对0个型号的应用程序,我很好奇它是否有任何影响


我也很好奇,你最初的两个查询是否会产生重大影响。

当应用程序运行时,主页的响应时间是多少?你已经分析了哪些内容?@DanielRoseman它的平均值约为
200ms
标记,这非常好。好的,一个好的开始是识别并删除这些计数查询。另外,您是否启用了预热请求?@JosvicZammit Correct-它允许系统在后台启动一个新实例,因此您的用户看不到启动时间过长。因此,这与。。。但是为什么
10s
预热不会发生在
webapp2
应用程序中?我不知道。我在我的java测试应用程序中看到了它。预热请求就是为此而设计的-不需要cronjob来完成它。@dragonx问题一定与Django很重和查询CloudSQL有关。。。与WebApp2一样,当冷却时,它总是以~2s标记响应。我正在做一些调整/改进,这将让您知道结果。@NickJohnson我将重点放在仅针对django的优化上,将django管理从生产实例上禁用。根据应用程序是在生产环境中运行还是在本地运行,我设置了Django设置变量
DEBUG
,现在如果我在本地运行,我还将添加到
MIDDLEWARE\u类
INSTALLED\u APPS
。我还删除了约600Kb的Django admin静态介质(它们正在生产中)。这些Django focuse调整将我在寒冷时的响应时间从上述~10秒提高到~5秒。@NickJohnson下一步是删除命中CloudSQL的查询。我删除了我的2个
count(*)
查询。现在响应时间总是~3s。Josvic,我想大部分时间都是磁盘加载时间。仅我的Django文件夹就有30MB,这需要时间来加载(webapp2要小得多)。所以,你不仅想从已安装的应用程序中删除额外的内容,而且根本不想从磁盘读取这些内容。尝试使用app.yaml中的“skip_files:”指令尽可能多地排除django/contrib@NickJohnson:无论如何,我需要一个cron任务来清除超时请求(特定于我的应用程序),所以这是一个额外的奖励。