21

私はrabbitmqバックエンドでセロリを使用しています。次のように、rabbitmq で 0 または 1 個のアイテムを含む何千ものキューを生成しています。

$ sudo rabbitmqctl list_queues
Listing queues ...
c2e9b4beefc7468ea7c9005009a57e1d        1
1162a89dd72840b19fbe9151c63a4eaa        0
07638a97896744a190f8131c3ba063de        0
b34f8d6d7402408c92c77ff93cdd7cf8        1
f388839917ff4afa9338ef81c28aad75        0
8b898d0c7c7e4be4aa8007b38ccc00ea        1
3fb4be51aaaa4ac097af535301084b01        1

これは効率が悪いように見えますが、さらに、これらのキューは処理が終了した後も長く存続することがわかりました。

これを行っているように見えるタスクを見つけました:

@celery.task(ignore_result=True)
def write_pages(page_generator):  
    g = group(render_page.s(page) for page in page_generator)
    res = g.apply_async()

    for rendered_page in res:
        print rendered_page # TODO: print to file

これらのタスクはグループで呼び出されているため、キューに投入されていますが、解放されていないようです。ただし、明らかに結果を消費しています ( を繰り返し実行すると結果が出力されているのを確認できるresためです。そのため、これらのタスクがキューに保持されている理由がわかりません。

さらに、作成されている多数のキューが何か間違っていることを示しているのではないかと考えています。

これについて助けてくれてありがとう!

4

2 に答える 2

20

AMQP バックエンドを使用する Celery は、結果を生成したタスク ID で名前が付けられた AMQP キューにタスクのトゥームストーン (結果) を保存します。これらのキューは、結果が排出された後も存続します。

いくつかの推奨事項:

于 2013-02-01T00:52:07.003 に答える