如何从芹菜后端存储中检索元数据

时间:2015-12-10 17:42:12

标签: python flask celery

我正在使用带有烧瓶应用程序的芹菜来启动一些后台任务,我使用mongoDB作为后端。

我想在后端存储一些有关正在启动的任务的信息,然后才能检索它。

我认为关键在于使用let img = document.createElement("img") { src = "foo.png"; className = "bar"; id = "abc123"; } ,其中meta是我的自定义信息。但是我找不到任何工作。

1 个答案:

答案 0 :(得分:2)

我们假设您有这样的任务:

@celery.task(bind=True)
def counter(self):
    for i in xrange(100):
        time.sleep(1)
        self.update(state='PROGRESS', meta={'current': i})
    return {'status': 'complete'}

你有这样的烧瓶路线:

@app.route('/count/')
def count_100():
    """
        this starts a counter task and returns a response immediately
    """ 
    task = counter.delay()
    # this will return an empty json object with 202 http code status
    # which means requests is still in progress and a Location header
    return jsonify(), 202, dict(Location=url_for('status', task_id=task.id))

最后你的任务状态路线是这样的:

from celery.result import AsyncResult
...
@app.route('/status/<task_id>/')
def status(task_id):
    task = AsyncResult(task_id) # retrieving the task we started
    if task.state == 'PROGRESS':
        response = {
            'state': task.state,
            'current': task.info.get('current', 0)
        }
    return jsonify(response)