2011-02-16 9 views
8

tengo Apache con 2 hosts virtuales, cada uno con un sitio Django adjunta usando mod_wsgi, modo demonio, como este:modo demonio mod_wsgi, WSGIApplicationGroup y Python separación intérprete

<VirtualHost 123.123.123.123:80> 
    WSGIDaemonProcess a.com user=x group=x processes=5 threads=1 
    WSGIProcessGroup a.com 
    WSGIApplicationGroup %{GLOBAL} 
</VirtualHost> 

<VirtualHost 123.123.123.123:80> 
    WSGIDaemonProcess b.com user=x group=x processes=5 threads=1 
    WSGIProcessGroup b.com 
    WSGIApplicationGroup %{GLOBAL} 
</VirtualHost> 

utilizo WSGIApplicationGroup %{GLOBAL} debido a a known problem with Xapian.

Ahora, si entiendo lo que sucede entre bambalinas, mod_wsgi lanza 5 procesos de daemon para cada uno de mis sitios. Puedo ver esto en el registro de Apache:

[info] mod_wsgi (pid=8106): Attach interpreter ''. 
[info] mod_wsgi (pid=8106): Adding '.../lib/python2.5/site-packages' to path. 
[info] mod_wsgi (pid=8106): Enable monitor thread in process 'a.com'. 
[info] mod_wsgi (pid=8106): Enable deadlock thread in process 'a.com'. 

[info] mod_wsgi (pid=8107): Attach interpreter ''. 
[info] mod_wsgi (pid=8107): Adding '.../lib/python2.5/site-packages' to path. 
[info] mod_wsgi (pid=8107): Enable monitor thread in process 'a.com'. 
[info] mod_wsgi (pid=8107): Enable deadlock thread in process 'a.com'. 

... 

Lo que no entiendo es si esos "Attach interpreter ''" líneas indican que todos esos procesos comparten la misma intérprete de Python, o si hay un intérprete por proceso. (Por cierto, me doy cuenta de que el nombre de intérprete vacío '' es causado por pasar %{GLOBAL} a WSGIApplicationGroup).

Intenté comprobar si tal vez sys.path entradas se acumularon en procesos posteriores, pero no lo hicieron, lo que podría indicar que hay un intérprete de Python separado para cada uno de los 5 procesos de daemon ... pero no entiendo muy bien cosas así que estoy preguntando aquí.

Respuesta

5

El valor 'pid' es diferente. Están en diferentes procesos.

+0

En tal caso, ¿WSGIApplicationGroup influye en algo en el modo daemon? –

+0

En cada proceso de un grupo de procesos de daemon, hay un intérprete del mismo nombre. El% {GLOBAL} es el intérprete principal, como si se ejecutara en la línea de comandos, lo que significa que puede ignorar todo el concepto de subinterpretadores y simplemente verlo como una aplicación de procesos múltiples donde las solicitudes se distribuyen en todos los procesos. . –

+0

Mi cabeza es demasiado pequeña para esto, así que permítanme pedir aclaraciones: para 5 procesos en el grupo de procesos de daemon, hay 5% de intérpretes {GLOBAL} (es decir, principales), uno para cada proceso. Si estoy en lo cierto, ¿cuál sería el efecto de: 'WSGIApplicationGroup MyOwnInterpreter' - habría dos intérpretes por proceso,% {GLOBAL} y MyOwnInterpreter, o solo uno pero con un nombre en lugar de ''? –

Cuestiones relacionadas