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