开发者

Django manage.py spawning several fcgi processes

Any idea whats the difference between the two commands below?

Command: 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

Command: 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

The second command looks like it spawns 6 processes, with memory allocated to each one.

  • What would be the best option if you do not have a lot of memory? and running several django instances?
  • Why does the second command spawn 6 processes?
  • What is the advantage/disadvantages of each approach?
  • How do you limit the amount of processes spawned?


The reason you're seeing multiple processes is because runfcgi uses method=prefork by default. With this method, a bunch of FCGI processes are forked to handle requests; obviously method=threaded uses a multithreaded FCGI process instead.

There are advantages and disadvantages to each. The prefork method will use more memory, since a process uses more memory than a thread. It will also take a bit more time to start up, since forking takes more time than creating a new thread. However, generally preforking handles load better than threading, so if your app has a high load, it may perform better with preforking (if it doesn't, you probably won't notice much of a difference either way).

Why does the second command spawn 6 processes? How do you limit the amount of processes spawned?

Django will spawn a default number of processes when preforking, if you don't specify how many to spawn. You can change this with the maxspare or maxchildren options.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜