这是代码,
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分钟的时间限制放在哪里。