Django manage.py порождает несколько процессов fcgi

Любая идея, в чем разница между двумя командами ниже?

Команда: 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам