Skip to content

Ressources du Meetup Python AFPy Lyon le 27 fév. 2019

Notifications You must be signed in to change notification settings

alemangui/afpy-lyon-meetup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AFPY Lyon Meetup

RabbitMQ et Celery

Ici vous trouverez le code et les diapositives du meetup RabbitMQ et Celery du 27 février 2019. Tout le code a été fait sur Python 3.6.

Table of contents

L'installation de RabbitMQ peut varier en dépendant de votre système d'exploitation. Vous trouverez les instructions ici : https://www.rabbitmq.com/download.html.

Les répertoires rabbit et celery ont leur propre fichier requirements.txt. La création d'un environnement virtuel est une façon simple de les installer.

Par exemple, pour le répertoire rabbit:

> cd rabbit
> virtualenv -p python3 venv
...
> source venv/bin/activate
> pip install -r requirements.txt
...

La même séquence de commandes est à faire dans le répertoire celery.

Le répertoire rabbit contient le code concernant la première partie du Meetup. Un producer.py envoie des messages au consumer.py, ce dernier se mettant en boucle infinie pour les recevoir.

Vous pouvez lancer un ou plusieurs consumers en faisant > python3 consumer.py.

Pour envoyer des messages, lancez le producer avec > python3 producer.py

consumer.py

> python consumer.py
On attend des messages {-_-}
On a reçu ce message: b'Coucou !' (^_^)

producer.py

> python producer.py
Envoyé !
>

Le répertoire Celery contient une application Django très basique (pas de base de données, pas de middleware, etc). Elle expose un endpoint /longRunningTask qui déclenche la tâche spécifiée sur views.py. Les tâches sont déclarées dans tasks.py. ` views.py

# Quelques tâches qu'on a défini dans tasks.py
from meetup.tasks import run_long_task
...

def task_view(request):
    """
    Cette view sera appelée à chaque requête arrivant sur "/longRunningTask".
    Vous pouvez ici remplacer "run_long_task" pour la tâche que vous voulez exécuter.
    """
    task = run_long_task.delay()
    return HttpResponse('', status=200)

Pour exécuter la tâche il suffit de lancer Django et Celery dans des processus différents.

Pour Django

> python3 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
February 11, 2019 - 02:58:13
Django version 2.1.5, using settings 'meetup.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Pour Celery

> celery -A meetup worker -l info -c 1

++++++ INITIALISATION DE LA TÂCHE
[email protected] v4.2.1 (windowlicker)

Darwin-18.0.0-x86_64-i386-64bit 2019-02-11 02:59:07

[config]
.> app:         meetup:0x10b500b38
.> transport:   amqp://guest:**@localhost:5672//
.> results:     rpc://
.> concurrency: 1 (prefork)
.> task events: OFF (enable -E to monitor tasks in this worker)

[queues]
.> celery           exchange=celery(direct) key=celery

[tasks]
  . meetup.celery.debug_task
  . meetup.tasks.get_band_details_task
  . meetup.tasks.run_long_task
  . meetup.tasks.run_retry_task
  . meetup.tasks.run_time_limits_task
  . meetup.tasks.save_artist
  . meetup.tasks.search_artist

Il suffit maintenant de lancer une requête à l'URL /longRunningTask.

Requête via CURL

> curl -X POST http://localhost:8000/longRunningTask/

Côté Django, vous devez voir la requête arriver et voir la réponse partir rapidement - sans devoir attendre que la tâche soit terminée.

Django

[11/Feb/2019 03:05:12] "POST /longRunningTask HTTP/1.1" 200 0

Côté Celery vous verrez la tâche en exécution :

Celery

[2019-02-11 03:05:12,023: INFO/MainProcess] Received task: meetup.tasks.run_long_task[c911cf72-5f68-4271-9795-04738b09af98]
[2019-02-11 03:05:12,025: WARNING/ForkPoolWorker-1] >>>>> DÉBUT
[2019-02-11 03:05:13,026: WARNING/ForkPoolWorker-1] >>>>> FIN
[2019-02-11 03:05:13,049: INFO/ForkPoolWorker-1] Task meetup.tasks.run_long_task[c911cf72-5f68-4271-9795-04738b09af98] succeeded in 1.0249147209979128s: None

Vous pouvez aussi lancer le test déclaré dans test.py avec la commande suivante :

> python3 manage.py test
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 1.019s

OK

La présentation se trouve dans le fichier slides.pdf dans la racine de ce repo.

About

Ressources du Meetup Python AFPy Lyon le 27 fév. 2019

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages