MRQ عبارة عن قائمة انتظار مهام موزعة لبيثون مبنية على قمة مونجو وريديس وجيفينت.
الوثائق الكاملة متاحة على readthedocs
MRQ عبارة عن قائمة انتظار مهام مدروسة. تهدف إلى أن تكون بسيطة وجميلة مثل RQ مع تقديم عروض قريبة من Celery
تم تطوير MRQ لأول مرة في Pricing Assistant وتتوافق مجموعة الميزات الأولية الخاصة به مع احتياجات قوائم انتظار العمال مع المهام غير المتجانسة (المرتبطة بـ IO والمرتبطة بوحدة المعالجة المركزية، والكثير من المهام الصغيرة وبعض المهام الكبيرة).
سيوضح لك هذا البرنامج التعليمي الذي مدته 5 دقائق كيفية تشغيل وظائفك الأولى باستخدام MRQ.
pip install mrq
mongod &
redis-server &
قم بإنشاء دليل جديد واكتب مهمة بسيطة في ملف يسمى 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 )
يمكنك الآن تشغيله من سطر الأوامر باستخدام 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
لنقم بجدولة نفس المهمة 3 مرات بمعلمات مختلفة:
$ 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
يمكنك أن ترى أنه بدلاً من تنفيذ المهام وإرجاع نتائجها على الفور، أضافها mrq-run
إلى قائمة الانتظار المسماة fetches
وطبع معرفاتها.
ابدأ الآن dasbhoard الخاص بـ MRQ باستخدام mrq-dashboard &
وانتقل للتحقق من قائمة الانتظار والوظائف التي تم إنشاؤها حديثًا على المضيف المحلي:5555
إنهم جاهزون للوقوف في قائمة الانتظار من قبل العامل. ابدأ باستخدام mrq-worker
واتبعه على لوحة المعلومات أثناء تنفيذ المهام المدرجة في قائمة الانتظار بالتوازي.
$ 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']
يمكنك مقاطعة العامل باستخدام Ctrl-C بمجرد الانتهاء.
كانت هذه معاينة للميزات الأساسية لـ MRQ. ما يجعلها مفيدة فعلا هو أن:
mrq-run
من سطر الأوامر.سيتم توضيح هذه الميزات في مثال مستقبلي لزاحف ويب بسيط.
الوثائق الكاملة متاحة على readthedocs