Question

Pour les opérations de mon serveur Tornado qui devraient bloc (et ne peut pas être facilement modifié pour utiliser des choses comme client de requête HTTP asynchrone de Tornado), je suis déchargeant le travail à des processus de travail séparés à l'aide du module multiprocessing. Plus précisément, je travaillais avec un Pool multitraitement car il offre une méthode appelée apply_async, qui fonctionne très bien avec Tornado, car il faut un rappel que l'un de ses arguments.

J'ai récemment réalisé qu'une piscine préalloue le nombre de processus, de sorte que si tous se bloquer, les opérations qui nécessitent un nouveau processus devra attendre. Je me rends bien compte que le serveur peut encore prendre des connexions depuis les travaux de apply_async en ajoutant des choses à une file d'attente de tâches, et est plutôt terminé immédiatement, lui-même, mais je suis à la recherche de spawn n processus pour n quantité de tâches bloquantes doivent effectuer.

Je me suis dit que je pouvais utiliser la méthode add_handler pour IOLoop de mon serveur Tornado pour ajouter un gestionnaire pour chaque nouveau PID que je crée à cette IOLoop. J'ai fait quelque chose semblable avant, mais il utilisais popen et une commande arbitraire. Un exemple d'une telle utilisation de cette méthode est

Autres conseils

Découvrez ce projet:

https://github.com/vukasin/tornado-subprocess

il vous permet de lancer des processus arbitraires de tornade et obtenir un rappel quand ils ont fini (avec accès à leur statut, stdout et stderr).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top