2010-12-03 104 views
3

任何想法下面的兩個命令之間的區別是什麼?Django manage.py產卵幾個fcgi進程

命令: manage.py runfcgi方法=螺紋主機= 127.0.0.1端口= 3033

[email protected]:/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 

命令:蟒manage.py runfcgi主機= 127.0.0.1端口= 7021協議= FCGI pidfile進程文件=/TMP/myproject.fcgi.pid

[email protected]:/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個處理,以分配給每個一個存儲器。

  • 如果你沒有很多內存,最好的選擇是什麼?並運行幾個Django實例?
  • 爲什麼第二個命令產生6個進程?
  • 每種方法的優點/缺點是什麼?
  • 你如何限制產生的進程量?

回答

6

您看到多個進程的原因是因爲runfcgi默認情況下使用method=prefork。用這種方法,一堆FCGI進程分叉處理請求;顯然method=threaded改爲使用多線程FCGI進程。

每個都有優點和缺點。 prefork方法將使用更多的內存,因爲進程比線程使用更多的內存。啓動起來也需要多一點時間,因爲分支比創建新線程需要更多的時間。然而,通常preforking處理的加載要比線程加載的好,所以如果你的應用程序有很高的負載,那麼它可能在preforking中表現更好(如果沒有,你可能不會注意到任何差別)。

爲什麼第二個命令產生6個進程?你如何限制產生的進程量?

如果您沒有指定要產生的數量,Django將在預執行時產生默認數量的進程。您可以使用maxsparemaxchildren選項更改此選項。