2016-10-30 6 views
2

私はRabbitMQでCeleryを実行しているサーバーを持っています。しかし、send_taskを使用してタスクを送信しようとすると、AsyncResultオブジェクトが返されます。
しかし、実際の作業は、私のセロリの設定があるCelery send_taskはタスクを送信しません

c = Celery("tasks", broker="amqp://[email protected]//") 
c.send_task("tasks.printing.test_print", (100), queue="print_queue", routing_key="printing.test_print") 

(労働者とキューが空であっても)実行されていない:

CELERY_QUEUES = (
    Queue('default', routing_key='task.#'), 
    Queue('print_queue', routing_key='printing.#'), 
) 
CELERY_DEFAULT_EXCHANGE = 'tasks' 
CELERY_ROUTES = { 
     'tasks.printing.test_print': { 
     'queue': 'print_queue', 
     'routing_key': 'printing.test_print', 
    }} 
BROKER_URL = 'amqp://' 

私は1つのワーカーを実行します。

celery -A celerymain worker --loglevel=debug 

これは最初のログです:

- ** ---------- [config] 
- ** ---------- .> app:   __main__:0x7eff96903b50 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  amqp:// 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] -------------- .> default   exchange=tasks(topic) key=task.# 
       .> print_queue  exchange=tasks(topic) key=printing.# 

[tasks] . test_print 

これは、タスクです:

class test_print(Task): 

    name = "test_print" 

    def run(self,a): 
     log.info("running") 
     print a 

RabbitMQのキュー「print_queue」が空のままと新しいものがRabbitMQのログにはありません。
4GBの空き容量があるので、ディスク容量の問題ではありません。

何が問題なのですか?

答えて

2

send_taskからrouting_keyパラメータを削除して問題を解決しました。

-1
@app.task(name="test_print") 
class test_print(Task): 

    name = "test_print" 

    def run(self,a): 
     log.info("running") 
     print a 
+3

あなたが言おうとしているこれは何が問題だった理由
は、私は本当に知りませんが、少なくともそれが動作しますか? – Drxxd

関連する問題