Python 在烧瓶应用程序中获取芹菜组结果

Python 在烧瓶应用程序中获取芹菜组结果,python,flask,celery,Python,Flask,Celery,我正在使用flask,设置了一个简单的应用程序,并试图学习如何有效地利用芹菜进行工作,当被查询时,显示结果 在最基本的示例中,我通过task.delay(args)创建了一个任务。然后,这个对象让我为作业提取一个ID,我可以稍后通过点击另一个端点来查询该ID。简单 我的目标是模仿这一点,尽管是利用小组。在阅读文档时,我发现group原语是惰性的,所以我必须在保存它之前调用它 我的问题肯定是因为缺乏理解,但基本上是: 如果我的目标是能够通过flask管道异步并行运行后台任务组,那么在给定以下约束的

我正在使用flask,设置了一个简单的应用程序,并试图学习如何有效地利用芹菜进行工作,当被查询时,显示结果

在最基本的示例中,我通过
task.delay(args)
创建了一个任务。然后,这个对象让我为作业提取一个ID,我可以稍后通过点击另一个端点来查询该ID。简单

我的目标是模仿这一点,尽管是利用小组。在阅读文档时,我发现group原语是惰性的,所以我必须在保存它之前调用它

我的问题肯定是因为缺乏理解,但基本上是: 如果我的目标是能够通过flask管道异步并行运行后台任务组,那么在给定以下约束的情况下,如何检索组的
.join()
结果

  • 请求Endpoint1(可能返回一个ID)
  • 请求Endpotin2,传递ID以返回已完成工作的结果
这是正确的方法吗?还是说我应该以不同的心态思考

Psuedo代码:

# From my apps init
celery_instance = Celery("module.modulename", backend = app.config['CELERY_RESULT_BACKEND'], broker = app.config['CELERY_BROKER_URL'])
celery_instance.conf.update(app.config)

<snip>

from celery import group
from app import celery_instance

@app.route("/status/domain/<id>", methods=['GET'])
def query(id):
  # Works for single job, not job group
  result = celery_instance.AsyncResult(id)
  ...

@app.route("/query/domain/<domain>", methods=['GET'])
def query_by_domain(domain):
  ...
  job = group([task1.delay(domain), task2.delay(domain)])
  return redirect(url_for('app.query', id=job.id), code=302)
#从我的应用程序初始化
celery\u实例=celery(“module.modulename”,backend=app.config['celery\u RESULT\u backend'],broker=app.config['celery\u broker\u URL'])
celery_instance.conf.update(app.config)
来自芹菜进口集团
从应用程序导入芹菜\u实例
@app.route(“/status/domain/”,方法=['GET'])
def查询(id):
#为单个作业而不是作业组工作
结果=芹菜\实例。AsyncResult(id)
...
@app.route(“/query/domain/”,方法=['GET'])
def按域查询(域):
...
作业=组([task1.延迟(域),task2.延迟(域)])
返回重定向(url_for('app.query',id=job.id),code=302)

您需要通过
GroupResult.save()
方法将组结果保存为:

@app.route("/query/domain/<domain>", methods=['GET'])
def query_by_domain(domain):
    ...
    job = group([task1.delay(domain), task2.delay(domain)])
    <b>job.save()</b>
    return redirect(url_for('app.query', id=job.id), code=302)

嘿,我想在烧瓶上做同样的事情。你找到办法了吗?没有,我没找到不幸的是:/
@app.route("/status/domain/<id>", methods=['GET'])
def query(id):
    # Works for single job, not job group
    <b>result = celery_instance.GroupResult.restore(group_id)</b>
    ...