2017-04-06 6 views
1

私たちはフラスコでセロリを使用しています。私たちのさまざまなタスクには多くのキューがあり、スーパーバイザを使用してキューを実行します。私たちはcloudamqp ブローカーを使用しています。セロリの各ノードに名前を付けるには

例のスーパーバイザ構成は以下のようなものです:

[program:my-queue] 
command=/home/ubuntu/opt/proect/venv/bin/celery -A async_runner worker -Q my_queue --loglevel=INFO --without-gossip --without-mingle --autoscale=1,1 -c 1 
environment=PYTHONPATH=/home/ubuntu/opt/project/,PRODUCTION_ENVIRONMENT=true 
directory=/home/ubuntu/opt/project/app 

process_name = %(program_name)s_%(process_num)02d 
user=ubuntu 
numprocs=2 
autostart=true 
autorestart=true 
startsecs=10 
stopwaitsecs = 600 
priority=998 

私たちは、次の取得エラーとキューだけを停止します。

[2017-04-06 12:43:06,759: WARNING/MainProcess] /home/ubuntu/opt/project/venv/local/lib/python2.7/site-packages/kombu/pidbox.py:75: UserWarning: A node named [email protected] is already using this process mailbox! 

Maybe you forgot to shutdown the other node or did not do so properly? 
Or if you meant to start multiple nodes on the same host please make sure 
you give each node a unique node name! 

    warnings.warn(W_PIDBOX_IN_USE.format(node=self)) 

質問:各ノードに名前を付けるにはどうすればよいですか?

celery -A async_runner statusを実行すると、5ノードのオンラインメッセージが表示されます。

[email protected]_value_here-: OK 
[email protected]_value_here-: OK 
[email protected]_value_here-: OK 
[email protected]_value_here-: OK 
[email protected]_value_here-: OK 

5 nodes online. 

答えて

1

ここでは、当社の各キューに対して1つのセロリワーカーを実行する方法を示します。エントリポイントは、これを含んでいます

echo QUEUES: ${QUEUES} # comma separated list of queue names 
export NUM_QUEUES=$(python -c "print len('$QUEUES'.split(','))") 
echo NUM_QUEUES: ${NUM_QUEUES} 

supervisord & 

スーパーバイザ設定ファイルがこれを持っている:

QUEUE=$(python -c "print '$QUEUES'.split(',')[$1]") # $1 = process_num above 
celery worker -n "worker.${QUEUE}" -Q ${QUEUE} # -n sets the name of the worker 
+0

ない、これは私の質問に答える場合、私は理解してください:

[program:worker] command=/path/to/celery_worker.sh %(process_num)s # supervisor uses the special ENV_ prefix to get the environment variable set above numprocs=%(ENV_NUM_QUEUES)s 

そして最後にcelery_worker.shは次のようなものが含まれています。 – Kishan

+0

@soupboy申し訳ありませんが、 '-n'は必要と思われる作業者の名前を設定することを明確にしていたはずです。 –

+0

@soupboy実際には、同じキューに対して複数のワーカーを実行していることがわかります。そのため、ワーカー名にも 'process_num'を含めることができます。 –

関連する問題