MRQ ist eine verteilte Aufgabenwarteschlange für Python, die auf Mongo, Redis und Gevent basiert.
Die vollständige Dokumentation finden Sie unter readthedocs
MRQ ist eine eigensinnige Aufgabenwarteschlange. Ziel ist es, einfach und schön wie RQ zu sein und gleichzeitig Celery-ähnliche Leistungen zu erbringen
MRQ wurde erstmals bei Pricing Assistant entwickelt und sein anfänglicher Funktionsumfang entspricht den Anforderungen von Worker-Warteschlangen mit heterogenen Jobs (IO-gebunden und CPU-gebunden, viele kleine und einige große Aufgaben).
Dieses 5-minütige Tutorial zeigt Ihnen, wie Sie Ihre ersten Jobs mit MRQ ausführen.
pip install mrq
mongod &
redis-server &
Erstellen Sie ein neues Verzeichnis und schreiben Sie eine einfache Aufgabe in eine Datei namens 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 )
Sie können es jetzt über die Befehlszeile mit mrq-run
ausführen:
$ 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
Lassen Sie uns die gleiche Aufgabe dreimal mit unterschiedlichen Parametern planen:
$ 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
Sie können sehen, dass mrq-run die Aufgaben nicht sofort ausführt und ihre Ergebnisse zurückgibt, sondern mrq-run
sie zur Warteschlange mit dem Namen fetches
hinzugefügt und ihre IDs gedruckt hat.
Starten Sie nun das Dashboard von MRQ mit mrq-dashboard &
und überprüfen Sie Ihre neu erstellte Warteschlange und Jobs auf localhost:5555
Sie sind bereit, von einem Arbeiter aus der Warteschlange entfernt zu werden. Starten Sie einen mit mrq-worker
und verfolgen Sie ihn auf dem Dashboard, während er die in der Warteschlange befindlichen Jobs parallel ausführt.
$ 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']
Sie können den Worker mit Strg-C unterbrechen, sobald er fertig ist.
Dies war eine Vorschau auf die grundlegenden Funktionen von MRQ. Was es tatsächlich nützlich macht, ist Folgendes:
mrq-run
über die Befehlszeile zu vermeiden.Diese Funktionen werden in einem zukünftigen Beispiel eines einfachen Webcrawlers demonstriert.
Die vollständige Dokumentation finden Sie unter readthedocs