우선 내 사이트가 정상적으로 실행 중입니다. 중요한 문제는 없습니다.장고 멀티 스레드 및 mod_wsgi
나는 두 가지를 이해하고 싶다.
시스템의 개요부터 시작하겠습니다.
이것은 mod_wsgi가있는 Apache에서 256MB RAM이있는 CentOS 5.3 VPS에있는 장고 동력 사이트입니다.
django 응용 프로그램은 스레드가 1 개인 데몬 프로세스로 실행됩니다. 나는 1. 초기화 로깅 (현재는 노력하고 있습니다,하지만 난 두 번 로깅 할 때마다 얻을)
이제 몇 가지 배경 작업을 수행하는 데몬 스레드 2. 시작 : 내 응용 프로그램에서 필요한 것은
입니다 http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html 에 제공된 솔루션을 읽고 구현했지만 많은 도움이되지 못했습니다.
기본적으로 작업자 MPM을 수동으로 비활성화해야합니다 (MPM 프리프레 드로 만 실행). 하나의 프로세스와 하나의 스레드로 구성된 데몬 프로세스를 구성해야합니다 (다른 이유로는 작동하지 않습니다).
하지만 이상한 점은 사이트가 실행 중이고 2 개의 백그라운드 스레드를 만들고 있다는 것입니다. 1. 어떻게됩니까? 2. 내 설정은 동시 요청이 내 사이트에서 처리되지 않는다는 의미입니까? 여기
내 사이트에서 일부 구성입니다을 httpd.conf
WSGIScriptAlias//var/www/NiceHouse/trunk/apache/django.wsgi
WSGISocketPrefix run/wsgi
<VirtualHost *:80>
WSGIDaemonProcess site-1 user=**** group=**** threads=1
WSGIProcessGroup site-1
ServerName *****
ServerAlias *****
ServerAdmin *****
#DocumentRoot /usr/local/www/documents
#Alias /robots.txt /usr/local/www/documents/robots.txt
#Alias /favicon.ico /usr/local/www/documents/favicon.ico
Alias /media/ /usr/lib/python2.4/site-packages/django/contrib/admin/media/
Alias /site_media/ /var/www/NiceHouse/trunk/media/
Alias /phpmyadmin /var/www/phpmyadmin/
#<Directory /usr/local/www/documents>
#Order allow,deny
#Allow from all
#</Directory>
WSGIScriptAlias//var/www/NiceHouse/trunk/apache/django.wsgi
#<Directory /usr/local/www/wsgi-scripts>
#Order allow,deny
#Allow from all
#</Directory>
</VirtualHost>
swtune.conf
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 3
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 1000
</IfModule>
django.wsgi
,451,515,import sys
import os
os.environ['PYTHON_EGG_CACHE']='/tmp/hoge'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
sys.path.insert(0,'/var/www/NiceHouse/trunk')
import settings
import django.core.management
django.core.management.setup_environ(settings)
utility = django.core.management.ManagementUtility()
command = utility.fetch_command('runserver')
command.validate()
import django.conf
import django.utils
django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE)
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
나는 당신 이유로 이중 로깅을 받고있을 수있는 모든 도움을
감사합니다, Elad
질문에 답하십시오. 1. 로깅 초기화는 패키지가 아닌 사이트의 settings.py에서 수행됩니다 (단 하나의 경로에서 가져와야합니다). 스레드 초기화는 주 패키지의 __init__.py에서 수행됩니다. 어디에서 가져오고 한 번 가져올 수 있습니까? 2. DJANGO_SETTINGS_MODULE은 스크립트가 없어도 작동하지 않기 때문에 존재합니다. 3. phpmyadmin을 사용하고 있습니다. 프리 플로우 MPM을 비활성화하고 작업자 MPM을 활성화하면 phpmyadmin이 제대로 작동하지 않습니다. 4. 메모리 사용량이 매우 높습니다. 256 개 중에 몇 MB 만 남았습니다. 사전 포크를 비활성화 했더라도. – Elad
로깅 초기화를 사이트 패키지의 __init__.py에도 넣으십시오. 스레드 화의 경우 init.py가 의미하는 바를 추측합니다. –