Ma question est: quel framework python dois-je utiliser pour construire mon serveur?Python "Task Server"
Notes:
- Ce pourparlers de serveur HTTP avec ses clients: GET et POST (via PyAMF)
- clients "soumettre" "tâches" pour le traitement et, puis, quelque temps plus tard, récupérer les associés " task_result »
- soumettre et de récupérer peuvent être séparés par jours - différentes connexions HTTP
- La « tâche » est un morceau de XML décrivant un problème à résoudre, et un « task_result » est un morceau de XML décrivant une réponse.
- Lorsqu'un serveur obtient une "tâche", il la met en file d'attente pour traitement
- Le serveur gère cette file d'attente et, lorsque les tâches arrivent en haut, organise leur traitement.
- le traitement est effectué par un programme externe de longue durée (via un sous-processus) qui alimente la tâche XML et produit un bloc de données XML "task_result" que le serveur récupère et stocke (pour récupération ultérieure du client)).
- il sert quelques pages HTML de base indiquant l'état de file d'attente et de traitement (fins d'administration uniquement)
Je l'ai expérimenté avec twisted.web, en utilisant SQLite comme la base de données et les fils pour gérer les longs processus en cours .
Mais je ne peux m'empêcher de penser qu'il me manque une solution plus simple. Suis-je? Si vous étiez confronté à cela, quelle combinaison de technologies utiliseriez-vous?
"Un seul processus externe de longue durée est trop complexe à coordonner"? Coordonnée avec quoi? En fait, l'idée d'avoir un travailleur externe est d'éviter tout besoin de coordination et de pouvoir facilement contrôler le parallélisme. Comme vous l'avez noté, les processus de génération sont en effet un problème lorsque vous attendez des rafales de requêtes, et vous avez vraiment besoin de plus de coordination. J'ai l'habitude de mettre en place plusieurs travailleurs sur plusieurs machines, et les superviser en utilisant supervord (http://supervisord.org/) – thesamet
Comment obtenez-vous le travail de et vers ce processus de longue durée? Il semble plus simple de simplement fourrer le travail en tant que sous-processus plutôt que de l'engager encore un autre exercice de CIP pour coordonner avec ces travailleurs externes. –
Vous utilisez un framework de file d'attente qui gère ces détails techniques pour vous (voir ma réponse). Je suis d'accord sur le fait que l'approche des sous-processus est plus simple et qu'il y a moins d'infrastructure à s'inquiéter, et c'est un bon choix pour certaines applications.Mais pour tout ce que je cours dans la production, je préférerais quelque chose qui offre plus de contrôle sur le parallélisme, et la mise en place d'un nombre fixe de travailleurs externes fait exactement cela. – thesamet