下面两个命令的区别是什么?
命令: 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
命令: 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
第二个命令看起来像生成了6个进程,每个进程都分配了内存。
答案 0 :(得分:6)
您看到多个进程的原因是runfcgi
默认使用method=prefork
。使用这种方法,分叉一堆FCGI进程来处理请求;显然method=threaded
使用多线程FCGI进程。
每种都有优点和缺点。 prefork方法将使用更多内存,因为进程使用的内存多于线程。启动也需要一些时间,因为分叉比创建新线程需要更多时间。但是,通常preforking句柄的加载比线程更好,所以如果你的app有很高的负载,它可能会在preforking中表现更好(如果没有,你可能不会注意到任何差异)。
为什么第二个命令会产生6个进程?你如何限制产生的进程数量?
如果你没有指定产生多少个进程,Django会在preforking时产生一个默认的进程数。您可以使用maxspare
或maxchildren
选项更改此选项。