2010-10-25 3 views
1

Quelles options ai-je pour le déploiement d'une application Python-WSGI liée à l'UC sous Windows?Déploiement Python WSGI sous Windows pour application avec processeur

L'application bénéficie grandement de plusieurs processeurs (manipulation/encodage d'image) mais le GIL l'empêche de les utiliser.

Je crois comprendre:

  • mod_wsgi n'a pas de support pour WSGIDaemonProcess sous Windows et Apache se ne fonctionne qu'avec un seul processus

  • toutes les solutions à base de fourche (flup, frai, gunicorn) ne fonctionne que sur unix

Y a-t-il d'autres options de déploiement qui me manquent?

PS: je asked that on serverfault mais quelqu'un a suggéré de demander ici.

Répondre

1

J'ai utilisé avec succès isapi-wsgi pour déployer des applications Web WSGI sur Windows IIS (je suppose que puisque vous déployez sur Windows, IIS est une option).

Créez un pool d'applications IIS pour héberger votre application et configurez-le en tant que Web Garden (Propriétés | Performances | Nombre maximal de processus de travail). Clause de non-responsabilité: Je n'ai jamais utilisé cette fonctionnalité moi-même (j'ai toujours utilisé la configuration par défaut du pool d'applications, où le nombre maximal de processus de travail est de 1). Mais je crois comprendre que cela créera plus de processus pour traiter les demandes.

+0

Non, IIS n'est pas une option, il devrait fonctionner avec Apache (natif ou via FastCGI/HTTP). – olt

+0

Eh bien, étant donné qu'Apache sur Windows ne prend en charge qu'un processus multithread, je suppose que vous ne pouvez pas vraiment héberger votre application dans Apache si vous voulez bénéficier de plusieurs processeurs. Peut-être héberger votre application dans IIS, et proxy inverse d'Apache? – codeape

0

Ce serait un peu le bordel, mais vous pourriez utiliser le module de sous-processus pour déclencher vous-même des processus de travail. Je suis sûr que Popen.wait() et/ou Popen.communicate() devraient libérer le GIL. Cependant, vous avez encore les frais généraux de création de processus, donc vous pourriez ne pas gagner beaucoup/rien sur le CGI standard.

Une autre option consiste à avoir des processus serveur/travail distincts fonctionnant tout le temps et à utiliser une forme d'IPC, bien que cela ne soit pas une option facile. Jetez un oeil au module multi-traitement, et potentiellement aussi Pyro.

Questions connexes