Celery では、クエリから取得したアイテムごとに 1 つのサブタスクを実行するメイン タスクを実行しています。サブタスクは並行して実行する必要があります。UI には、合計で実行されたサブタスクの数を示す進行状況バーがあります。主なタスクの状態を更新して、進行状況バーに情報を提供しています。私の問題は、すべてのサブタスクをブローカーにプッシュした直後にメインタスクが終了したため、ブローカーの状態を更新できなくなったことです。すべてのサブタスクが完了するまで、メイン タスクを待機できることを望みます。出来ますか?他の解決策はありますか?これが私の疑似コードです(実際のコードはグローバルを使用しません;-))。
total = 0
done = 0
@task(ignore_result=True)
def copy_media(path):
global total, done
copy_media.update_state(state=STARTED, meta={'total': total, 'done': done})
documents = Document.objects.all()
total = documents.count()
copy_media.update_state(state=STARTED, meta={'total': total, 'done': done})
for document in documents:
process_doc.delay(document, path, copy_media)
@task(ignore_result=True)
def process_doc(document, path, copy_media):
global total, done
# Do some stuff
done += 1
copy_media.update_state(state=STARTED, meta={'total': total, 'done': done})