В моем проекте Flask я использую MongoDB в качестве брокера для задач Celery, а также в качестве хранилища результатов задач.Я тоже хочу хранить программные аргументы в БД.В этом примере мне нужно добавить имя пользователя, который инициировал задачу.
CELERY_BROKER_URL = 'mongodb://localhost:27017/celery'
CELERY_RESULT_BACKEND = 'mongodb://localhost:27017/'
CELERY_MONGODB_BACKEND_SETTINGS = {
'database': 'production',
'taskmeta_collection': 'celery_tasks',
}
Ниже находится раздел store_result celery \ backends \ mongodb.py
Я добавил новое поле для хранения имени пользователя, который инициировал запрос, и именно здесь яя застрялЯ должен быть в состоянии передать это моему бэкэнду результатапрямо сейчас поле добавляется.Но я не могу передать имя пользователя в результате.я попытался вернуть имя пользователя в качестве аргумента в результате сельдерея (return (finalop, username)).Но он не добавляется в поле, которое я создал.
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.Есть ли способ достичь этого
_id : 5c5ba819fda59156c888987d
uname : "baru"
pid : "b2d13a3b-2d0f-41a1-8229-8b6917c3dafb"