Flask Celery-将程序参数存储到Mongo CELERY_RESULT_BACKEND

时间:2019-02-07 10:29:54

标签: mongodb flask celery celery-task

在我的Flask项目中,我将MongoDB用作Celery任务的代理,也用作任务结果的存储。我也想在DB中存储程序参数。在此示例中,我需要添加发起任务的人员的用户名。

CELERY_BROKER_URL = 'mongodb://localhost:27017/celery'
CELERY_RESULT_BACKEND = 'mongodb://localhost:27017/'

CELERY_MONGODB_BACKEND_SETTINGS = {
'database': 'production', 
'taskmeta_collection': 'celery_tasks',
}

下面是celery \ backends \ mongodb.py的store_result部分

我添加了一个新字段来存储发起请求的人的用户名,这就是我遇到的问题。我需要能够将此传递给我的结果后端。现在,该字段正在添加。但是我无法将用户名传递给结果。我试图在celery结果中返回用户名作为参数(返回(finalop,用户名))。但这并没有添加到我创建的字段中。

def _store_result(self, task_id, result, state, arg1,traceback=None, request=None, **kwargs):
    """Added arg1 to retrieve username"""
    """Store return value and state of an executed task."""
    meta = {
        '_id': task_id,
        'status': state,
        'result': result,
        'username':** I have to  pass value here from arg1**,
        'date_done': datetime.utcnow(),
        'traceback': self.encode(traceback),
        'children': self.encode(
            self.current_task_children(request),
        ),
    }

    try:
        self.collection.save(meta)
    except InvalidDocument as exc:
        raise EncodeError(exc)

    return result

app.py

@app.route('/Home')
def func1():
    codes = ["FIRF9","3BINV"]
    oop = index.delay(codes)
    emplist = []
    who = {'uname': 'baru', 'pid':oop.task_id}
    emplist.append(who)
    user = mongo.db.tasks #storing in a seperate document 'tasks'
    user.insert(emplist) 
    doc = mongo.db.tasks.find().limit(100)
    return render_template('tasklist.html',data=doc)

@celery.task(name='celery_example.scrape')
def index(codes):
    time.sleep(10)
***some opertaion here***            
    finalop.append(info)
    return (finalop)

我也可以在mongodb后端中得到结果,但是用户名没有被添加。

_id    :    "b2d13a3b-2d0f-41a1-8229-8b6917c3dafb"
status    :    "SUCCESS"
result    :    Array of results
username  : None
date_done    :    2019-02-07 03:38:20.144
traceback    :    "null"
children    :    "[]"

现在我正在使用单独的文档来跟踪所有创建的任务,并且在查询结果后显示结果。但是我需要将uname字段移动到store_result meta。有什么办法可以做到这一点

_id    :    5c5ba819fda59156c888987d
uname    :    "baru"
pid    :    "b2d13a3b-2d0f-41a1-8229-8b6917c3dafb"

0 个答案:

没有答案