this SO answerで受け入れられた回答は、実際に私が欲しかったものを達成するのに役立ちました。 (おそらく、これはやっかいな方法でしたが、私の問題は解決しました)。その答えは、しかしとしてエラーを投げた:私は以下のように解決することができました
EncodeError: <AsyncResult: cf5875f1-7f72-449c-9808-07c9c9459737> is not JSON serializable
はユースケースでそう
(私はその答えのコメントでも、この変更を言及しています)答えにおける一部:我々はタスクオブジェクトのリストを渡しているamass.delay()
の2番目のパラメータとして
tasks = []
for i in xrange(10):
tasks.append(power.delay(i, 2))
amass.delay([], tasks)
。私はちょうど代わりに実際にタスクIDのリストを渡すためにこれを変更しました。だから、amass()
は今のようになります。
tasks = []
for i in xrange(10):
x = power.delay(i, 2)
tasks.append(x.id)
amass.delay([], tasks)
と の下に表示し、それがエラーを解決し、私が達成しようとしていた仕事をしてくれたようamass()
でそれぞれの変更を行いました。
@celery.task()
def amass(results, tasks):
completed_tasks = []
for task_id in tasks:
result = AsyncResult(task_id, app=celery)
if result.ready():
completed_tasks.append(task_id)
#results.append(task.get()) did not need this so commented it out
# remove completed tasks
tasks = list(set(tasks) - set(completed_tasks))
if len(tasks) > 0:
# resend the task to execute at least 1 second from now
amass.delay(results, tasks, countdown=1)
else:
# we done
print results
[誰も私の質問に答えました](https://stackoverflow.com/help/no-one-answers)をご覧ください。再投稿は正しいことではありません。 – SiHa