MRQ est une file d'attente de tâches distribuée pour Python construite sur Mongo, Redis et Gevent.
La documentation complète est disponible sur readthedocs
MRQ est une file d'attente de tâches opiniâtres. Il se veut simple et beau comme RQ tout en ayant des performances proches du Céleri
MRQ a été développé pour la première fois chez Pricing Assistant et son ensemble de fonctionnalités initial correspond aux besoins des files d'attente de travailleurs avec des tâches hétérogènes (liées aux E/S et au CPU, beaucoup de petites tâches et quelques grandes).
Ce tutoriel de 5 minutes vous montrera comment exécuter vos premiers travaux avec MRQ.
pip install mrq
mongod &
redis-server &
Créez un nouveau répertoire et écrivez une tâche simple dans un fichier appelé tasks.py
:
$ mkdir test-mrq && cd test-mrq
$ touch __init__.py
$ vim tasks.py
from mrq . task import Task
import urllib2
class Fetch ( Task ):
def run ( self , params ):
with urllib2 . urlopen ( params [ "url" ]) as f :
t = f . read ()
return len ( t )
Vous pouvez maintenant l'exécuter depuis la ligne de commande en utilisant mrq-run
:
$ mrq-run tasks.Fetch url http ://www.google.com
2014-12-18 15 :44:37.869029 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...
2014-12-18 15 :44:37.880115 [DEBUG] mongodb_jobs: ... connected.
2014-12-18 15 :44:37.880305 [DEBUG] Starting tasks.Fetch({'url': 'http://www.google.com'})
2014-12-18 15 :44:38.158572 [DEBUG] Job None success: 0.278229s total
17655
Planifions la même tâche 3 fois avec des paramètres différents :
$ mrq-run --queue fetches tasks.Fetch url http ://www.google.com &&
mrq-run --queue fetches tasks.Fetch url http ://www.yahoo.com &&
mrq-run --queue fetches tasks.Fetch url http ://www.wordpress.com
2014-12-18 15 :49:05.688627 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...
2014-12-18 15 :49:05.705400 [DEBUG] mongodb_jobs: ... connected.
2014-12-18 15 :49:05.729364 [INFO] redis: Connecting to Redis at 127.0.0.1...
5492f771520d1887bfdf4b0f
2014-12-18 15 :49:05.957912 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...
2014-12-18 15 :49:05.967419 [DEBUG] mongodb_jobs: ... connected.
2014-12-18 15 :49:05.983925 [INFO] redis: Connecting to Redis at 127.0.0.1...
5492f771520d1887c2d7d2db
2014-12-18 15 :49:06.182351 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...
2014-12-18 15 :49:06.193314 [DEBUG] mongodb_jobs: ... connected.
2014-12-18 15 :49:06.209336 [INFO] redis: Connecting to Redis at 127.0.0.1...
5492f772520d1887c5b32881
Vous pouvez voir qu'au lieu d'exécuter les tâches et de renvoyer leurs résultats immédiatement, mrq-run
les a ajoutées à la file d'attente nommée fetches
et imprimé leurs identifiants.
Maintenant, démarrez le dasbhoard de MRQ avec mrq-dashboard &
allez vérifier votre file d'attente et vos travaux nouvellement créés sur localhost : 5555.
Ils sont prêts à être retirés de la file d'attente par un ouvrier. Démarrez-en un avec mrq-worker
et suivez-le sur le tableau de bord pendant qu'il exécute les tâches en file d'attente en parallèle.
$ mrq-worker fetches
2014-12-18 15 :52:57.362209 [INFO] Starting Gevent pool with 10 worker greenlets (+ report, logs, adminhttp)
2014-12-18 15 :52:57.388033 [INFO] redis: Connecting to Redis at 127.0.0.1...
2014-12-18 15 :52:57.389488 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...
2014-12-18 15 :52:57.390996 [DEBUG] mongodb_jobs: ... connected.
2014-12-18 15 :52:57.391336 [DEBUG] mongodb_logs: Connecting to MongoDB at 127.0.0.1:27017/mrq...
2014-12-18 15 :52:57.392430 [DEBUG] mongodb_logs: ... connected.
2014-12-18 15 :52:57.523329 [INFO] Fetching 1 jobs from ['fetches']
2014-12-18 15 :52:57.567311 [DEBUG] Starting tasks.Fetch({u'url': u'http://www.google.com'})
2014-12-18 15 :52:58.670492 [DEBUG] Job 5492f771520d1887bfdf4b0f success: 1.135268s total
2014-12-18 15 :52:57.523329 [INFO] Fetching 1 jobs from ['fetches']
2014-12-18 15 :52:57.567747 [DEBUG] Starting tasks.Fetch({u'url': u'http://www.yahoo.com'})
2014-12-18 15 :53:01.897873 [DEBUG] Job 5492f771520d1887c2d7d2db success: 4.361895s total
2014-12-18 15 :52:57.523329 [INFO] Fetching 1 jobs from ['fetches']
2014-12-18 15 :52:57.568080 [DEBUG] Starting tasks.Fetch({u'url': u'http://www.wordpress.com'})
2014-12-18 15 :53:00.685727 [DEBUG] Job 5492f772520d1887c5b32881 success: 3.149119s total
2014-12-18 15 :52:57.523329 [INFO] Fetching 1 jobs from ['fetches']
2014-12-18 15 :52:57.523329 [INFO] Fetching 1 jobs from ['fetches']
Vous pouvez interrompre le travailleur avec Ctrl-C une fois qu'il a terminé.
Il s'agissait d'un aperçu des fonctionnalités de base de MRQ. Ce qui le rend réellement utile, c'est que :
mrq-run
à partir de la ligne de commande.Ces fonctionnalités seront démontrées dans un futur exemple de robot d’exploration Web simple.
La documentation complète est disponible sur readthedocs