2009-12-08 15 views
0

J'ai un petit problème de threading avec une librairie que j'utilise pour générer et servir des graphiques et diagrammes dynamiques dans Zope. Voir this question pour une description de mon problème original. Comme le site est déjà en production, je n'ai pas le temps de déboguer cette bibliothèque (je ne suis pas expert en C ni en threading), donc je suis à la recherche d'une solution rapide. La meilleure idée que je pourrais trouver est d'utiliser mod_wsgi comme une sorte de garde:Restreindre certaines URL à un seul thread

WSGIScriptAlias /graphs /path/to/my/app.wsgi 
WSGIDaemonProcess mysite user=www-data group=www-data processes=1 threads=1 

L'application wsgi à /path/to/my/app.wsgi serait simplement rediriger toutes les demandes de /_graphs qui est traitée à nouveau par Zope. Parce que je restreindre l'application wsgi à un processus avec un thread, il devrait empêcher tout problème de thread. Le site n'est pas à fort volume, je m'en fous si ça me coûte un peu de performance. En outre, je ne m'inquiète pas que l'URL /_graphs n'est pas protégée de l'accès direct, le problème d'origine n'apparaît que si les graphiques sont téléchargés simultanément, ce qui se produit uniquement lorsque l'utilisateur affiche une page avec plusieurs graphiques dynamiques incorporés. Cependant, cette «solution» (si elle fonctionne même) fait pleurer le petit informaticien dans ma tête comme un bébé. De meilleures idées?

+0

Vous ne dites pas ce qu'il en est de votre situation qui va à l'encontre du principe de "l'informatique", il est donc difficile de répondre à votre question. –

+0

Eh bien, je pense juste que c'est un hack moche, et je suis intéressé s'il y a peut-être une solution avec moins de hacks, peut-être en utilisant une directive ou un module apache –

Répondre

2

Vous n'avez pas besoin de rediriger. Do:

WSGIDaemonProcess multithreaded processes=1 threads=15 
WSGIDaemonProcess singlethreaded processes=3 threads=1 

WSGIScriptAlias//path/to/my/app.wsgi 

WSGIProcessGroup multithreaded 

<Location /graphs> 
WSGIProcessGroup singlethreaded 
</Location> 

En d'autres termes, l'application se propager sur plusieurs groupes de processus démon, en utilisant la directive Emplacement pour déléguer les URL qui doivent être traitées dans le groupe de processus mono-thread.

Notez que, normalement, on n'utilise pas 'processes = 1' car WSGIDaemonProcess utilise par défaut un processus de toute façon. Dans ce cas, nous le voulons, car toute utilisation de l'option 'processes' entraîne la définition de 'wsgi.multiprocess' sur True et dans ce cas nous voulons toujours que ce flag soit vrai pour le processus 'multithread' afin que le code sache qu'il est partie de la configuration multiprocessus même si ce groupe de processus daemon en particulier ne contient qu'un seul processus.

+0

Cela n'a pas de sens. Et ce serait une bonne excuse pour finalement déplacer cette instance de Zope vers WSGI. Merci pour votre explication approfondie! –