在 Django 中使用 pm2

Use pm2 with Django

我刚刚从使用 NodeJS 的 Express 更改为使用 Python 的 Django。我唯一想念 NodeJS 的是出色的进程管理器 pm2。我可以将 pm2 与 Django 一起使用吗?

这确实是一个很宽泛的问题,但是我想谈谈我个人的观点,因为我在我的项目中使用了这两个框架。

express(nodejs) to django(python)

Express 和Django 都是Web 框架,但是Node 和Python 不属于同一类。你可以说 JS 和 Python 更好。 Node是JS的运行环境,所以像pm2这样的工具可以有效管理Node进程。

对于基于 Python 的 Web 项目,您需要 select 一种方式(接口)来为它们提供服务。常见的可能性是 CGI and WSGI.

我不能谈论flask,但Django 推荐的方式是WSGI。有几个选项,包括 mod_wsgi、uwsgi 和 gunicorn。任何控制其流程的工具都取决于您的选择。

从这个意义上说,这更复杂了一个层次。我建议您探索所有这些,阅读它们,可能测试它们并选择最适合您需要的一个。

我个人更喜欢 uwsgi,因为我发现它非常快,尤其是在负载下,有时 mod_wsgi 如果主机如此配置 (doh)。 UWSGI 有一个 excellent stats 解决方案。

更不用说,对于您最终使用 WSGI 的任何服务器,都有许多工具。

话虽如此,对于简单的请求,您将不会轻易达到节点的响应时间。但是当节点中的事情变得复杂时(太多的回调,太多的查询等)然后时间变得非常相似。另一方面,一旦你掌握了 Django,你就会惊讶于与 Node 的回调地狱和完全不成熟的数据层相比,你需要编写和维护代码的时间是多么少。

您可以定义一个 pm2 脚本,例如

pm2{name}.json

内容如下:

 {
  "apps": [
    {
      "name": "{name}",
      "cwd": "/srv/{name}",
      "args": "runserver",
      "script": "manage.py",
      "exec_mode": "fork",
      "exec_interpreter": "python"
    }
  ]
}

和运行它与pm2 start {name}

显然您需要将 {name} 替换为您的项目名称。

 {
  "apps": [
    {
      "name": "{name}",
      "cwd": "/srv/{name}",
      "args": "runserver",
      "script": "manage.py",
      "exec_mode": "fork",
      "exec_interpreter": "python"
    }
  ]
}

步骤

  • 从给定的 link
  • 安装节点
  • 在命令提示符/终端中使用此命令安装 npm reference
npm install npm@latest -g
  • 运行 此命令用于在服务器计算机上不间断地执行 django 应用程序
     pm2 start echosystem.config.json
     Description of echosystem.config.json
{       
   apps:            
      [{
        name: "djnago_with_pm2",          
        script: "manage.py",
        args: ["runserver", "127.0.0.1:8000"], 
        exec_mode: "fork", 
        instances: "1", 
        wait_ready: true, 
        autorestart: false, 
        max_restarts: 5, 
        interpreter : "python" 
      }] 
}    
  • 如果我们必须改变我们的django应用程序的端口号,那么我们可以改变 echosystem.config.json 文件的 args 属性中的端口号。 在 echosystem.config.json 文件中完成更改后,使用

    停止服务器
  • 列表项

    pm2 命令如下:

    • pm2 stop all // 此命令将停止所有服务器。
    • pm2 stop 0 // 如果你知道 pm2 id 然后执行这样的命令。
    • pm2 start echosystem.config.json // 再次启动 django 应用程序。

从这里下载完整的示例项目django_with_pm2