Flask 芹菜能在队列中存储给定任务状态的序列吗?
我正在构建一个烧瓶应用程序,其中包含一个很长的处理任务,我使用芹菜。 长任务被划分为子任务,之后我用一条新消息更新状态。 我编写了一个Flask路由来请求任务的状态,但是我不只是返回当前状态及其元数据(消息msg),而是希望返回所有“未读”的进度状态及其消息 基本上,我希望始终打印web客户端中的所有状态序列。在下面的示例中,即使在第一次taskstatus请求时,任务的状态是第二个进度状态,使用消息“More processing…”,我也希望发送前一个状态“processing file…” 一种选择是跟踪某个全局变量中的消息,并在消息发送后清除它,但我想知道芹菜中是否有类似的“集成”功能 芹菜任务 烧瓶Flask 芹菜能在队列中存储给定任务状态的序列吗?,flask,celery,Flask,Celery,我正在构建一个烧瓶应用程序,其中包含一个很长的处理任务,我使用芹菜。 长任务被划分为子任务,之后我用一条新消息更新状态。 我编写了一个Flask路由来请求任务的状态,但是我不只是返回当前状态及其元数据(消息msg),而是希望返回所有“未读”的进度状态及其消息 基本上,我希望始终打印web客户端中的所有状态序列。在下面的示例中,即使在第一次taskstatus请求时,任务的状态是第二个进度状态,使用消息“More processing…”,我也希望发送前一个状态“processing file…”
@app.route(“/status/”)
def任务状态(任务id):
任务=异步结果(任务id)
如果task.state==“挂起”:
#工作还没有开始
响应={'msg':'Task pending…'}
如果task.state=='PROGRESS',则为else:
响应={'msg':}
否则,如果task.state==“成功”:
响应={'msg':task.info.get('msg')}
其他:
响应={'msg':'something other'}
返回jsonify(响应)
@celery.task(bind=True, name='tasks.process')
def process(self, filepath):
self.update_state(
state='PROGRESS',
meta={'msg': 'Processing file...'})
...
self.update_state(
state='PROGRESS',
meta={'msg': 'More processing...'})
...
return {'msg': 'Task completed !'}
@app.route('/status/<task_id>')
def taskstatus(task_id):
task = AsyncResult(task_id)
if task.state == 'PENDING':
# job did not start yet
response = {'msg': 'Task pending...'}
else if task.state == 'PROGRESS':
response = {'msg': <LIST OF UNREAD MSG FROM PAST PROGRESS STATES>}
else if task.state == 'SUCCESS':
response = {'msg': task.info.get('msg')}
else:
response = {'msg': 'something else'}
return jsonify(response)