1

Celery 結果のバックエンドを追加していますが、タスクを送信するという問題があり、一部は受け入れられますが、一部は受け入れられません。

実行されるタスクと実行されないタスクの両方で、次のログ出力が表示されます。

[2014-06-09 15:50:59,091: INFO/MainProcess] Received task: tasks.multithread_device_listing[e3ae6d12-ad4b-4114-9383-5802c91541f2]

実行されたものは、次の出力を示します。

[2014-06-09 15:50:59,093: DEBUG/MainProcess] Task accepted: tasks.multithread_device_listing[e3ae6d12-ad4b-4114-9383-5802c91541f2] pid:2810

実行されていないタスクが上記の行に到達することはありません。

タスクの送信方法:

from celery import group
from time import sleep


signatures = []
signature = some_method_with_task_decorator.subtask()
signatures.append(signature)
signature = some_other_method_with_task_decorator.subtask()
signatures.append(signature)
job = group(signatures)
result = job.apply_async()
while not result.ready():
    sleep(60)

私のセロリの設定は、次のように報告することから:

    software -> celery:3.1.11 (Cipater) kombu:3.0.18 py:2.7.5
                billiard:3.3.0.17 py-amqp:1.4.5
    platform -> system:Darwin arch:64bit imp:CPython
    loader   -> celery.loaders.app.AppLoader
    settings -> transport:amqp results:amqp://username:pass@localhost:5672/automated_reports

    CELERY_QUEUES:
        (<unbound Queue automated_reports -> <unbound Exchange default(direct)> -> automated_reports>,)
    CELERY_DEFAULT_ROUTING_KEY: '********'
    CELERY_INCLUDE:
        ('celery.app.builtins',
     'automated_reports.queue.tasks',
     'automated_reports.queue.subtasks')
    CELERY_IMPORTS:
        ('automated_reports.queue.tasks', 'automated_reports.queue.subtasks')
    CELERY_RESULT_PERSISTENT: True
    CELERY_ROUTES: {
        'automated_reports.queue.tasks.run_device_info_report': {   'queue': 'automated_reports'},
        'uploader.queue.subtasks.multithread_device_listing': {   'queue': 'automated_reports'},
        'uploader.queue.subtasks.multithread_individual_device': {   'queue': 'automated_reports'},
        'uploader.queue.tasks.multithread_device_listing': {   'queue': 'automated_reports'},
        'uploader.queue.tasks.multithread_individual_device': {   'queue': 'automated_reports'}}
    CELERY_DEFAULT_QUEUE: 'automated_reports'
    BROKER_URL: 'amqp://username:********@localhost:5672/automated_reports'
    CELERY_RESULT_BACKEND: 'amqp://username:pass@localhost:5672/automated_reports'

私の起動コマンドは次のとおりです。

~/Documents/Development/automated_reports/bin/celery worker --loglevel=DEBUG --autoreload -A automated_reports.queue.tasks -Q automated_reports -B --schedule=~/Documents/Development/automated_reports/log/celerybeat --autoscale=10,3

また、セロリを停止すると、受け入れられなかったタスクがキューから取り出されます。その後、再起動すると、それらを受け入れて実行します。

この動作に関するヘルプは大歓迎です。バックエンドの構成に問題があることは確かですが、問題の切り分けや修正に苦労しています。ありがとう!

4

1 に答える 1

1

これに対する答えを見つけました。

「inqueue」がタスクを適切に受け取っているように見える場合とそうでない場合があることに気付きました。Celery のドキュメントを検索したところ、次のメモが見つかりました

私は長期実行タスク内からサブタスクを実行していたので、これは私が見た動作に非常によく似ていました。また、私は上記のバージョンを使用していますが、以前のバージョンでは同じ構成でこの問題は発生していませんでした。

-Ofair パラメーターをワーカーの開始に追加したところ、すぐに問題が解決しました。

于 2014-06-10T14:54:11.510 に答える