Quelle est la meilleure façon de mettre en œuvre un ensemble de processus de travail compatibles avec gevent?

StackOverflow https://stackoverflow.com/questions/5360050

Question

Scénario

J'ai un processus serveur mis en œuvre en Python et gevent, qui se connecte à un service de back-end sur TCP / IP et au service de nombreux clients Web (~ 1000 par processus) avec un contenu dynamique en évolution rapide en fonction des changements fournis par le service de back-end . Le service est en cours d'exécution sur Ubuntu 10.04 et ne fonctionnera pas sur Windows, de sorte que la plate-forme cible est fixée. Nous utilisons Python 2.6.6, actuellement.

Problème

Au service des changements que beaucoup de clients peuvent provoquer un retard dans le traitement des changements envoyés par le serveur, donc mon plan est de diviser le serveur en plusieurs processus. Un certain nombre de processus de travail servirait les clients Web, alors que le processus principal serait toujours connecté au service de back-end. J'utilise déjà une piscine séparée de greenlets pour servir les clients Web, mais ils doivent être mis en processus de travail.

Question

Pouvez-vous s'il vous plaît me pointer vers un processus de mise en œuvre pour travailler piscine ou gevent figure comment puis-je utiliser propre module de multitraitement Python avec gevent la bonne façon?

Restrictions

Je voudrais éviter d'introduire des fils Python dans nos processus, car cela donne place à GIL contention, ce qui réduirait les performances en introduisant des latences. Donc, ce serait une multitraitement propre + solution gevent, si possible.

Était-ce utile?

La solution

Je recommande de consulter Céleri -. Système de traitement des tâches distribué écrit en Python

L'idée de base avec celery est que vous avez une file d'attente (soit RabbitMQ ou Redis), avec les travailleurs écrits comme processus Python, et par le démon exposé de celeryd. Selon la documentation de céleri, supports de celeryd en cours d'exécution en mode gevent aussi (pour le réseau d'E / S processus liés), donc probablement votre code de travail aurait pas besoin de modification beaucoup à fonctionner dans cet environnement.

Autres conseils

Je considère la prise de commande IPC ou en utilisant ZeroMQ.

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