2010-07-13 4 views
0

Je cours un site par apache2.x avec mod_wsgi 2.5, et python2.5. Il est configuré pour s'exécuter en multi-processus et chaque processus ne contient qu'un seul thread. Lorsque je lis ce post, j'essaie de définir le nom du processus sur PATH_INFO, mais cela ne fonctionne pas. Mon code est comme:définir le nom du processus dans mod_wsgi

import ctypes 
libc = ctypes.CDLL('/lib/libc.so.6') 
def application (environ, start_response): 
    libc.prctl(15, environ.get('PATH_INFO', 'WSGI'), 0, 0, 0); 
    # other codes 
+0

Hmmm, qui a supprimé l'autre réponse à cette question par Alex? Il était là il y a un instant. –

+0

@Graham, je ne sais pas pourquoi sa réponse est supprimée. Est-il possible de trouver mes commentaires sur la réponse disparue? – lethe

+0

Je suis un peu fâché qu'il soit parti ainsi que j'ai expliqué dans les commentaires exactement pourquoi le py-setproctitle() ne fonctionne pas. Plus précisément, la façon dont il essaie de faire les choses ne fonctionnera pas dans un système embarqué comme mod_wsgi car la copie Python de argv n'est jamais initialisée et donc il est probable qu'il accède à un pointeur nul et plante le processus. Un processus démon qui plante est la façon dont vous obtenez la fin prématurée des en-têtes de script dans le cas de mod_wsgi. –

Répondre

3

Si vous utilisez le mode démon mod_wsgi, est-il quelque chose de mal avec l'option display-name à WSGIDaemonProcess. Cette option est justement pour changer le nom du processus à une valeur fixe en utilisant l'affectation setproctitle() ou argv [0] car on pense que cela fonctionne pour des plates-formes spécifiques. Voir:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

Notez qu'il est logique de le faire pour les processus en mode démon et non le serveur Apache traite eux-mêmes. Ainsi, pourquoi n'est disponible que pour la directive WSGIDaemonProcess. Il est tout à fait logique de le définir une fois sur le démarrage du processus et non basé dynamiquement sur la demande.

+1

> Il est tout à fait logique de le paramétrer une fois au démarrage du processus et non basé dynamiquement sur la requête. Ce que j'attends est de définir dynamiquement le nom du processus en fonction de la requête, le * PATH_INFO * in environ – lethe

+0

Cela n'a aucun sens, car PATH_INFO va changer entre les requêtes et parce que le serveur web peut être multithread différentes demandes peuvent vouloir le définir à différentes valeurs en même temps. De plus, sur les systèmes où vous n'avez pas setproctitle(), le hack consiste à changer la valeur de la valeur du tableau argv [0]. Vous ne pouvez cependant y ajouter que l'original argv [0] et rien de plus. Ainsi, si PATH_INFO est plus long que cela, il sera tronqué et vous perdrez la dernière moitié du chemin. –

+0

BTW, si vous voulez une sorte de statut en temps réel sur les requêtes qu'Apache gère, alors utilisez mod_status. Voir 'http://httpd.apache.org/docs/2.2/mod/mod_status.html'. Il vous montrera les URL auxquelles vous accédez. –

Questions connexes