在特定时间限制内执行功能,如果执行,则将其与响应一起发送

时间:2018-06-15 12:02:43

标签: python asynchronous flask python-asyncio

这是代码,

from flask import Flask, jsonify

def return_along_with_prediction(self, data):
  # Preprocess the data and returns a dataframe
  df = transform_to_dataframe(data)
  model= Model()
  result = Job().start_job(model)
  return result

class Job:
  def create_job_id(self):
    # Some logic to compute job id
    return job_id

  def start_job(self, model):
    job_id=self.create_job_id()
    prediction = model.predict()
    return {‘id’: job_id, ‘prediction’: prediction}


App = Flask(__name__)

@App.route(‘/get-job-id’, method=[‘POST’])
def myfunc():
  result = return_along_with_prediction(request.json)
  return jsonify(result)

在此应用程序中,model.predict()需要更长的时间才能完成,这会延迟响应。 我想要的是,如果model.predict()在1分钟内完成,则发送作业ID和预测。 否则,只发送没有预测的作业ID。

这是我尝试过的。

import asyncio
from flask import Flask, jsonify

def return_along_with_prediction(self, data):
  # Preprocess and returns a dataframe
  df = transform_to_dataframe(data)
  model= Model()
  result = Job().start_job(model)
  return result

class Job:
  def create_job_id(self):
    # Some logic to compute job id
    return job_id

  async def operation(self, future, model):
    result = await model.predict()
    future.set_result(result)

  def start_job(self ,model):
    job_id=self.__create_job_id(n=6)
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    future = asyncio.Future()
    asyncio.ensure_future(self.operation(future,model))
    loop.run_until_complete(future)
    loop.close()
    return {‘id’: job_id, ‘prediction’: future.result()}


App = Flask(__name__)

@App.route(‘/get-job-id’, method=[‘POST’])
def fun():
  result = predict(request.json)
  return jsonify(result)

我认为这可以通过异步和等待来完成。我究竟做错了什么? 我不知道在这段代码中将1分钟的时间限制放在哪里。

0 个答案:

没有答案