2010-03-09 18 views
3

Je cherche des moyens simples de surveiller et de limiter le nombre d'instances de notre application sous Terminal Server (2003 et 2008).Technique pour limiter le nombre d'instances de notre application sous Terminal Server

Le but de cette restriction est de veiller à ne pas surcharger nos serveurs. C'est une exigence administrative interne - je ne cherche pas de solution de licence.

L'application en question est écrite en Python 2.6 (32 bits) mais je suis heureux de recevoir des réponses agnostiques de l'outil de développement. Bien que nous n'utilisions pas Citrix, je suis heureux de recevoir des idées liées à Citrix dans l'espoir de pouvoir utiliser une technique similaire avec Terminal Server.

+0

Comment avez-vous mesuré le fait qu'une application Python "surcharge" les serveurs. Sur quelles mesures avez-vous basé cela? Comment savez-vous que c'est votre application Python qui est le coupable? –

Répondre

1

Les différentes instances de votre application ont besoin d'un moyen de communiquer les unes avec les autres. Quand une instance démarre, elle pose la question "combien sont déjà en cours d'exécution?". S'il y a plus de n autorisé, il choisit de ne pas démarrer.

Une approche de mise en œuvre peut être de faire des fichiers n à verrouiller pour les instances n de votre application que vous autorisez à exécuter en même temps. Ensuite, l'application essaie d'obtenir un verrou sur l'un de ces fichiers; s'il ne le peut pas, il sort immédiatement. Relâchez le verrou lorsque vous avez terminé, mais sans doute le système d'exploitation libérerait le verrou pour vous si vous plantez.

Une autre approche consisterait à enregistrer une partie d'information unique par processus (un PID?) Dans un emplacement central (une base de données) lorsque vous démarrez. Pourtant, un troisième pourrait être d'utiliser un serveur réseau hôte uniquement où un programme serveur dédié ou l'une des instances coordonne les communications avec les autres instances. Si l'hôte se ferme, l'une des autres instances peut s'auto-promouvoir pour devenir le serveur.

1

D'après les commentaires sur la liste de diffusion de l'API Python Win32 J'envisage également l'une des techniques suivantes:

  1. Utilisation de Windows sémaphores

  2. En utilisant un pool de Mutex (offrir un meilleur recouvrabilité que sémaphores)

  3. en utilisant une plage de ports