Python の itertools を使用して大量の製品リストを生成するプログラムがあります。基本的に、単語のさまざまな組み合わせの大きなセットです。products() 関数を実行するための複数のセットがあります。私がやりたいのは、各セットを別の Celery タスクに割り当て、最後にそれらを組み合わせることで、Celery にこれを手伝ってもらうことです。私の理解では、和音はこれを行う方法です。
だから本質的に私はこれを持っています:
callback = tabulate_results.subtask()
header = []
for combo in combos_to_run:
header.append(run_product.subtask(args=(object_terms, combo)))
result = chord(header)(callback)
result.get()
そして、それをサポートする 2 つの簡素化された関数:
from celery import subtask, chord
@task()
def run_product(object_list, combo_set):
results = []
for result in product(object_list, *combo_set):
results.append(result)
return results
@task()
def tabulate_results(result_sets):
master_set = []
for result_set in result_sets:
master_set.extend(result_set)
return master_set
最初は、コード タスクが celeryev に表示されていましたが、ここで参照されている問題がありました: Django Celery - Missing something but I know what? 結果はありますが、Celery が MySQL を介した結果追跡に関係するエラーを返すことについて、結果を取得できません。実際、結果のバックエンドに MySQL を使用していましたが、Redis に切り替えることでそれがなくなりました。しかし、今、私は新しい問題を抱えています。Django シェルでコードを実行すると、celeryev にタスクが表示されず、これ以上何も返されません。
R IS: <GroupResult: 9f658e8d-591f-4fa9-9e79-4db0c51e8331 [9b199d1e-061f-413c-9521-4a3051dd121a, 2effbfb5-c9dc-4569-a63f-656c233a9387, 80911a60-6a22-46bb-83a1-d5a84c659794, 70acfa43-8ffe-4bc8-8ff1-1df6def035e1, dd417423-d1f6-44eb-8c4b-2ded40d7614f, fbff8adc-815d-459c-b914-b30528dbbd39]>
基本的に Celery メッセージですが、データはありません。コードも返されず、カーソルがぶら下がったままになります。control-C を出力すると、行番号は Celery で待機しているように見えるものです。celeryevが私に仕事を与えないので、私は何を考えていません。celeryev で他のタスクが表示されることを確認しました。
関数を Celery タスクとして実行せずに正常にテストしたところ、正常に戻りました。
ショートバージョン 私のDjangoアプリで集中的なPythonタスクを支援するためにCeleryコードを取得しようとしていますが、結果を返したり、celeryevに入力したりしていないようです. Redis バックエンド。セロリ バージョン 3.0.15。ジャンゴ1.4.