Contexte
Pour la réalisation des projets d'appplications Web, nous utilisons le framework Python Django. Ce framework inclut un puissant ORM (pour ne pas devoir écrire de requête SQL) ainsi qu'un bon générateur de formulaire. Associé a au framework CSS Bootstrap de Twitter, nos applications web sont simples, intuitives et responsives.
https://www.djangoproject.com/
https://getbootstrap.com/
Full Stack Python
Développer un application Web dans l’environnement Python permet d'avoir accès directement aux librairies de Data mining, d'IA et de tracé de courbe . Toutefois, par nature, un serveur Web se doit de délivrer les pages en moins d'une seconde. Il est impensable de faire attendre l'utilisateur plusieurs minutes avant d'afficher la page. De plus, les threads d’exécution du codes des pages web ont des limitations de ressource volontairement limités.
Celery Task Queue
Dans le cas où les calcules sont longs, nous devons déporter l’exécution dans un processus séparé puis sauvegarder le résultat pour le présenter à l'utilisateur. Il existe plusieurs façon de faire cela et je vais vous présenter
Celery, une librairie Python spécialisée.
http://celeryproject.org/
- Pour installer Celery:
pip install celery
- Voici comment utiliser Celery dans votre code:
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
Apres l'inclusion de la librairie, nous devons déclarer un objet Celery et l'utiliser comme annotation sur la fonction que vous voulez déporter. Plus tard, dans votre code, quand vous appellerez directement cette fonction, elle sera déporté automatiquement vers un processus spécialisé.
Dans cette exemple, nous pouvons voir l'usage du protocole de broker Amqp. Le broker est le programme qui va gérer une file d'attente des processus. Le broker fait l'interface entre votre code et le processus d’exécution de votre fonction.
Voici comment (grosso-modo) fonctionne la librairie:
- Au lancement de la fonction "add" Celery prendre le contrôle de l’exécution
- Celery sérialise alors les paramètres d'entrée et inscrit la tache dans le broker.
- Le deamon Celery récupère les taches depuis le brocker puis exécute.
- Une fois le processus terminé, le retour de la fonction sera sérialisé dans le stockage.
Bien sûr, il reste à votre charge de vérifier régulièrement l’état d’exécution du processus et d'afficher le résultat dans votre page web.
Celery supporte plusieurs brokers, protocoles, stockages et formats de sérialisation:
| Result Stores AMQP, Redis Memcached, SQLAlchemy, Django ORM Apache Cassandra, Elasticsearch, Riak MongoDB, CouchDB, Couchbase, ArangoDB Amazon DynamoDB, Amazon S3 Microsoft Azure Block Blob, Microsoft Azure Cosmos DB File system
Serialization pickle, json, yaml, msgpack. zlib, bzip2 compression. Cryptographic message signing.
|