Django manage.py порождает несколько процессов fcgi - PullRequest
3 голосов
/ 03 декабря 2010

Есть идеи, в чем разница между двумя приведенными ниже командами?

Команда: manage.py метод runfcgi = нитевой хост = 127.0.0.1 порт = 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 процессов с выделением памяти для каждого.

  • Какой будет наилучший вариант, если у вас недостаточно памяти?и работает несколько экземпляров Django?
  • Почему вторая команда порождает 6 процессов?
  • В чем преимущества / недостатки каждого подхода?
  • Как ограничить количество порождаемых процессов?

1 Ответ

6 голосов
/ 04 декабря 2010

Причина, по которой вы видите несколько процессов, заключается в том, что runfcgi использует method=prefork по умолчанию. С помощью этого метода группа процессов FCGI разветвляется для обработки запросов; очевидно, method=threaded использует вместо этого многопоточный процесс FCGI.

У каждого есть свои преимущества и недостатки. Метод prefork будет использовать больше памяти, поскольку процесс использует больше памяти, чем поток. Запуск также займет немного больше времени, поскольку разветвление занимает больше времени, чем создание нового потока. Однако, как правило, дескрипторы предварительной обработки загружаются лучше, чем потоки, поэтому, если ваше приложение имеет высокую нагрузку, оно может работать лучше с предварительной обработкой (если этого не произойдет, вы, вероятно, не заметите большой разницы в любом случае).

Почему вторая команда порождает 6 процессов? Как вы ограничиваете количество порожденных процессов?

Django будет порождать количество процессов по умолчанию при предварительном форкинге, если вы не укажете, сколько порождать. Вы можете изменить это с помощью опций maxspare или maxchildren.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...