MRQ เป็นคิวงานแบบกระจายสำหรับ python ที่สร้างขึ้นบน mongo, redis และ gevent
เอกสารฉบับเต็มมีอยู่ใน readthedocs
MRQ เป็นคิวงานที่ดื้อดึง มุ่งหวังให้เรียบง่ายและสวยงามเหมือน RQ ในขณะที่มีการแสดงที่ใกล้เคียงกับ Celery
MRQ ได้รับการพัฒนาครั้งแรกที่ Pricing Assistant และชุดคุณลักษณะเริ่มต้นตรงกับความต้องการของคิวผู้ปฏิบัติงานที่มีงานต่างกัน (ผูกกับ IO และ CPU งานเล็กจำนวนมาก และงานใหญ่สองสามงาน)
บทช่วยสอนความยาว 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
และพิมพ์ ID ของพวกเขา
ตอนนี้เริ่ม dasbhoard ของ MRQ ด้วย mrq-dashboard &
และไปตรวจสอบคิวและงานที่คุณสร้างขึ้นใหม่บน localhost: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