MRQ는 mongo, redis 및 gevent를 기반으로 구축된 Python용 분산 작업 대기열입니다.
전체 문서는 readthedocs에서 볼 수 있습니다.
MRQ는 독선적인 작업 대기열입니다. 셀러리에 가까운 퍼포먼스를 가지면서 RQ처럼 심플하고 아름다운 것을 지향합니다.
MRQ는 Pricing Assistant에서 처음 개발되었으며 초기 기능 세트는 이기종 작업(IO 바인딩 및 CPU 바인딩, 많은 작은 작업 및 몇 가지 큰 작업)이 있는 작업자 대기열의 요구 사항과 일치합니다.
이 5분 튜토리얼에서는 MRQ를 사용하여 첫 번째 작업을 실행하는 방법을 보여줍니다.
pip install mrq
로 MRQ 설치mongod &
로 mongo 서버를 시작하세요redis-server &
사용하여 Redis 서버 시작 새 디렉터리를 만들고 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를 인쇄했음을 알 수 있습니다.
이제 mrq-dashboard &
사용하여 MRQ의 dasbhoard를 시작하고 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
사용하지 않으려면 Python 코드에서 작업을 대기열에 추가할 수 있습니다.이러한 기능은 간단한 웹 크롤러의 향후 예에서 시연될 것입니다.
전체 문서는 readthedocs에서 볼 수 있습니다.