У меня есть очень простое приложение Flask, которое обслуживает модель машинного обучения, которая выводит прогноз с заданным текстом в качестве входных данных (задача классификации).Образ докера приложения успешно собран и развернут в OpenShift.
Я могу связаться с конечной точкой, используя curl
с терминальной консоли внутри OpenShift, и получить ожидаемый ответ.
Моя цель - сделать то же самое с моей локальной машины (за пределами OpenShift).Для этого я пытаюсь использовать библиотеку requests
Python, но пока мне это не удалось.
Я пытался, следуя официальной документации OpenShift , использоватьследующий скрипт.
import requests
import json
url = 'http://insert_ip_here:insert_port_here'
headers = {'Authorization': 'Bearer insert_token_here'}
insert_text = "whatever_text_here"
data = json.dumps({'email-text':insert_text})
pred = requests.post(url, data, headers=headers, verify=False)
, но я получаю следующую ошибку
ConnectionError: HTTPConnectionPool(host='***', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000219721E9E48>: Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'))
Обратите внимание, что, если я докеризую приложение на своем локальном компьютере и использую тот же скрипт, что и выше (без headers
и verify
параметры в requests.post
и URL-адрес http://localhost:8080) все работает нормально.
Обновлено : вот скрипт app.py
import pickle
import numpy as np
import pandas as pd
from flask import Flask, request, abort, jsonify
# here is where I load the machine learning model
with open('fasttext_classifier.pkl', 'rb') as f:
model = pickle.load(f)
# create the application object as an instance of class Flask
app = Flask(__name__)
# add a decorator to the function “make_predict” defined below. The function just returns the prediction as JSON
@app.route('/', methods=['POST'])
def make_predict():
data = request.get_json(force=True)
predict_request = [data['email-text']]
predict_request = np.array(predict_request)
prediction = model.predict(pd.DataFrame(predict_request))
output = [prediction[0]]
return jsonify(predicted_class=output)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
Любая идея, что может быть причиной ошибки выше?