Django网站业绩放缓

时间:2016-01-29 11:18:14

标签: python django performance wsgi gunicorn

好吧所以我想解释一下我的小django问题,我无法绕过它。

问题

我有一个小网站,只有几页显示数据库记录列表。该网站是我公司的内部渲染农场监视器,可能随时有十几个或两个活动连接。不超过50。

问题是我有三个更新服务,在打开时会导致真正的性能损失。

每个更新服务都是以下的python脚本:

  1. 使用urllib2向网址发出http请求。
  2. 等待回复
  3. 将带有时间戳的成功消息打印到日志中。
  4. 等待10秒钟,然后重新开始。
  5. 他们发送的URL请求我的django网站轮询外部服务并将新数据读入我们的django数据库。网址看起来像这样:

    当打开这些更新服务(尤其是updateTasks)时,http://webgrid/甚至可能需要超过10秒才能开始为普通用户加载。

    设置

    Django 1.8,与Gunicron v18一起部署。

    主要的gunicorn服务使用这些参数运行(拆分成一个列表以便于阅读)。

    <PATH_TO_PYTHON>
    <PATH_TO_GUNICORN> 
    -b localhost:80001 
    -u farmer 
    -t 600 
    -g <COMPANY_NAME> 
    --max-requests 10000 
    -n bb_webgrid 
    -w 17 
    -p /var/run/gunicorn_bb_webgrid.pid 
    -D 
    --log-file /xfs/GridEngine/bbgrid_log/bb_webgrid.log
    bb_webgrid.wsgi:application
    

    此站点的Apache配置:

    <VirtualHost *:80>
        ServerName webgrid.<INTERAL_COMPANY_URL>
        ServerAlias webgrid
    
        SetEnv force-proxy-request-1.0 1
    
        DocumentRoot /xfs/GridEngine/bb_webgrid/www
        CustomLog logs/webgrid_access.log combined
        ErrorLog logs/webgrid_error.log
        #LogLevel       warn
        <Directory "/xfs/GridEngine/bb_webgrid/www">
                AllowOverride All
        </Directory>
    
        WSGIDaemonProcess webgrid processes=17 threads=17
        WSGIProcessGroup webgrid
    
    </VirtualHost>
    

1 个答案:

答案 0 :(得分:4)

这种事情不应该在网上完成;通过点击指向视图的URL,您不必要地占用您的网络服务器,这会阻止它完成其真正的工作,即响应用户请求。

相反,这是带外的。一个非常简单的方法就是写一个Django management command;这样您就可以从命令行脚本轻松调用模型方法。现在,您可以简单地指出您的cron作业或其他任何内容来调用这些命令,而不是调用一个单独的Python脚本来调用您站点上的URL。

另一种方法是使用芹菜;它是一个非常好的系统,用于执行长时间运行的异步任务。它甚至有自己的调度系统,所以你可以完全替换你的cron作业。