Это решение, которое я разработал для достижения вышеуказанного.
Справка: https://realpython.com/python-sockets/
Мне нужно создать 2 сценария. 1. скрипт клиента python: используется для передачи необработанных данных, которые должны быть классифицированы, на скрипт сервера python с использованием программирования сокетов.
Скрипт server python: Загружает lib и модель keras (tenorflow) при запуске. Продолжает оставаться в живых до тех пор, пока клиент не запросит «стоп» (для выхода пока l oop). Когда клиентский сценарий отправляет данные серверному сценарию, серверный сценарий обрабатывает входящие данные и возвращает выходные данные ok / not ok обратно клиентскому сценарию.
В конце время классификации равно уменьшено до 0,1 - 0,3 с.
Клиентский скрипт
import socket
import argparse
from argparse import ArgumentParser
def main():
parser = ArgumentParser(description='XXXXX')
parser.add_argument('-i','--input', default='NA', help='Input txt file path')
parser.add_argument('-o','--output', default='NA', help='Output csv path with class')
parser.add_argument('-stop','--stop', default='no', help='Stop the server script')
args = parser.parse_args()
str = args.input + ',' + args.output + ',' + args.stop
HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 65432 # The port used by the server
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
bytedata = str.encode()
sock.send(bytedata)
data = sock.recv(1024)
print('Received', data)
if __name__== "__main__":
main()
Серверный скрипт
def main():
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(5)
stop_process = 'no'
while (stop_process == 'no'):
# print('Waiting for connection')
conn, addr = sock.accept()
data = ''
try:
# print('Connected by', addr)
while True:
data = conn.recv(1024)
if data:
stop_process = process_input(data) # process_input function processes incoming data. If client sends 'yes' for the stop argument, the stop_process variable will be set to 'yes' by the function.
byte_reply = stop_process.encode()
conn.sendall(byte_reply) # send reply back to client
else:
break
conn.close()
# print('Closing connection',addr)
finally:
conn.close()
if __name__== "__main__":
main()