泊坞窗中Python网络服务器在ML模型中回答发布请求的用途

问题描述 投票:0回答:1

我正在尝试接收POST请求,对其进行解析,然后调用模型方法以对给定数据进行预测。然后将预测结果返回或在Web服务器上打印。

到目前为止,我可以得到我在给定的json文件中写过的一些文本的POST答案(已通过Insomnia检查)。>>

Docker Toolbox有时会不允许我运行Web服务器,但我不理解,这是我犯的错误。我要求事先在Dockerfile中安装所有必需的库。

#!/usr/bin/python3
from http.server import BaseHTTPRequestHandler, HTTPServer
import socket
import subprocess
from io import BytesIO

from keras.models import Sequential
from keras.layers import Dense
import pandas as pd
import numpy as np
from urllib import request, parse

# HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):

  # GET
    def do_GET(self):
        # Send response status code
        self.send_response(200)

        # Send headers
        self.send_header('Content-type','text/html')
        self.end_headers()
        self.wfile.write(b'Hello, world!')
        # Send message back to client
        message = "<font size=+3>Hello world!(HTML)</font><p>"
        self.wfile.write(bytes(message, "utf8"))

    def do_POST(self):
        content_length = int(self.headers['Content-Length']) #  Gets the size of data
        body = self.rfile.read(content_length)  # - Gets the data itself
        self.send_response(200)
        self.end_headers()
        response = BytesIO()
        response.write(b'wto proishodit????. ')
        response.write(b'This is POST request. ')
        response.write(b'Received: ')
        response.write(body)
        self.wfile.write(response.getvalue())

def run():
    print('starting server...')

   # Server settings
   # Choose port 8081, for port 80, which is normally used for a http server, you need root access
    server_address = ('', 8888)
    httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
    print('running server...')
    httpd.serve_forever()

class modelnn(object):
    """docstring"""

    def __init__(self,data):
        """Constructor"""
        self.data = data

  def get_result(self):
        train = pd.DataFrame([[0, 0, 1, 0],[1, 1, 1, 1], [1, 0, 1, 1], [0, 1, 1,0]])
        train.columns = ['ohe1', 'ohe2','ohe3', 'output']
        X_train = train[['ohe1', 'ohe2','ohe3']]
        y_train = train['output']

        batch_size = 2
        epochs = 6
        model = Sequential()
        model.add(Dense(3, activation = 'relu', input_shape=(3,)))  
        model.add(Dense(1, activation = 'sigmoid'))  
        model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
        model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0); 

        a = model.predict(self.data)
        b =np.apply_along_axis(lambda x: round(x[0]), 1, a )
        return b


X_test = pd.DataFrame([[0, 0, 1],[1, 1, 1], [1, 0, 1], [0, 1, 1],[1, 0, 0]])
X_test.columns = ['ohe1', 'ohe2','ohe3']
resultat = modelnn(X_test)
b = resultat.get_result() 


run()

我尝试在请求后使用json.loads(body)对其进行解析,但无法解决。

input.json中的发布请求是这样的:'{“ a”:[2,2,2]}'。

使用Docker Toolbox,我创建了一个映像,然后运行它:

docker build -t server .
docker run -t -p 8888:8888 server

我想,我在Docker上做错了,或者我没有完全理解逻辑,所以任何帮助都将非常有用。谢谢!

https://github.com/dwfjwedk/webserver.git

我正在尝试接收POST请求,对其进行解析,然后调用模型方法以对给定数据进行预测。然后,将预测结果返回或打印在Web服务器上。到目前为止,我可以通过一些...

python docker post keras webserver
1个回答
0
投票

问题主要与错误使用空格和制表符以及.json请求的文本有关。

© www.soinside.com 2019 - 2024. All rights reserved.