2017-03-22 16 views
0

私はtasks.pyと呼ばれるPythonファイルを持っています。このファイルでは、4つの単一タスクを定義しています。私は4つのキューを使用するためにセロリを構成したいと思います。なぜなら、各キューには異なる数の作業者が割り当てられるからです。私はroute_taskプロパティを使用する必要がありますが、私はいくつかのオプションを試して成功していないと読んでいた。セロリ1つのブローカー複数の待ち行列と作業者

私はこのdoc以下celery route_tasks docs

私の目標は4人の労働者、各タスクのいずれかを実行されるだろうし、異なるキューに異なる労働者から仕事を混在させないでください。それが可能だ?それは良いアプローチですか?

私が何か間違ったことをやっている場合、私はそれがここ

を動作させるために私のコードを変更することが幸せになるこれまでのところ、私のconfigです

tasks.py

app = Celery('tasks', broker='pyamqp://[email protected]//') 
app.conf.task_default_queue = 'default' 
app.conf.task_queues = (
    Queue('queueA', routing_key='tasks.task_1'), 
    Queue('queueB', routing_key='tasks.task_2'), 
    Queue('queueC', routing_key='tasks.task_3'), 
    Queue('queueD', routing_key='tasks.task_4') 
) 


@app.task 
def task_1(): 
    print "Task of level 1" 


@app.task 
def task_2(): 
    print "Task of level 2" 


@app.task 
def task_3(): 
    print "Task of level 3" 


@app.task 
def task_4(): 
    print "Task of level 4" 

実行セロリ1つのワーカー各キューについて

celery -A tasks worker --loglevel=debug -Q queueA --logfile=celery-A.log -n W1& 
celery -A tasks worker --loglevel=debug -Q queueB --logfile=celery-B.log -n W2& 
celery -A tasks worker --loglevel=debug -Q queueC --logfile=celery-C.log -n W3& 
celery -A tasks worker --loglevel=debug -Q queueD --logfile=celery-D.log -n W4& 
+0

基本的に私の問題は、ドキュメントと混乱していました。私は3.xバージョンを使用していましたが、4.xのドキュメントを使用していました... – cralfaro

答えて

2

サブミットのための複雑なルーティングに入る必要はありませんタスクをさまざまなキューに移します。いつものようにあなたの仕事を定義してください。

from celery import celery 

app = Celery('tasks', broker='pyamqp://[email protected]//') 

@app.task 
def task_1(): 
    print "Task of level 1" 


@app.task 
def task_2(): 
    print "Task of level 2" 

タスクをキューに入れている間に、タスクを適切なキューに入れます。それを行う方法の例がここにあります。

In [12]: from tasks import * 

In [14]: result = task_1.apply_async(queue='queueA') 

In [15]: result = task_2.apply_async(queue='queueB') 

これはqueueBqueueAtask_2という名前のキューにtask_1を配置します。

これで、作業を開始して消費することができます。

celery -A tasks worker --loglevel=debug -Q queueA --logfile=celery-A.log -n W1& 
celery -A tasks worker --loglevel=debug -Q queueB --logfile=celery-B.log -n W2& 
関連する問題