Django manage.py产生了几个fcgi进程

ism*_*ail 3 django spawn-fcgi

有什么想法,下面两个命令之间的区别是什么?

命令: manage.py runfcgi method = threaded host = 127.0.0.1 port = 3033

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   14558  0.0  2.2  65948  8212 ?        Sl   Oct19   0:09 python /var/www/django_projects/myproject/manage.py runfcgi method=threaded host=127.0.0.1 port=3033
Run Code Online (Sandbox Code Playgroud)

命令: python manage.py runfcgi host = 127.0.0.1 port = 7021 protocol = fcgi pidfile =/tmp/myproject.fcgi.pid

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   21082  0.0  2.8  15440 10472 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21083  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21084  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21085  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21086  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21087  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
Run Code Online (Sandbox Code Playgroud)

第二个命令看起来像生成了6个进程,并为每个进程分配了内存.

  • 如果你没有大量的记忆,最好的选择是什么?并运行几个django实例?
  • 为什么第二个命令会产生6个进程?
  • 每种方法的优点/缺点是什么?
  • 你如何限制产生的进程数量?

mip*_*adi 6

您看到多个进程的原因是默认情况下runfcgi使用method=prefork.使用这种方法,分叉一堆FCGI进程来处理请求; 显然method=threaded使用多线程FCGI进程.

每个都有优点和缺点.prefork方法将使用更多内存,因为进程使用的内存多于线程.启动也需要一些时间,因为分叉比创建新线程需要更多时间.但是,通常预先处理句柄的负载比线程更好,因此如果您的应用程序具有高负载,它可能会在预先执行时表现更好(如果没有,您可能不会注意到任何差异).

为什么第二个命令会产生6个进程?你如何限制产生的进程数量?

如果你没有指定产生多少个进程,Django会在preforking时产生一个默认的进程数.您可以使用maxsparemaxchildren选项更改此设置.