python服务调用-基于http的通信写协议(flask)-linux
创始人
2024-03-26 14:48:18
0

服务器要部署一套算法, 我们的部署在该服务器上的数据平台需要调用 该算法进行一些操作,

要点主要两方面: 1.客户端发请求(同时传数据给服务). 2. 服务端的算法响应给请求,处理结束后,返回数据给客户端.这里一般第一次使用http协议的时候有点懵,其实是非常简单,我这里给了一个详细的例子,(因为我在网上看了很多资料,发现大多都是讲原理,或则例子不够详尽)

这就要考虑几个方面:

1.通信:

这里考虑用http的传输协议,因为这是短响应,并不是持续调用通信,flask框架是一个轻量化的web通信框架,所以我选择使用flask, 并使用post协议.

一般你要查一下机器上的ip地址

选择前两个的任意一个作为服务地址,比如选第二个127.0.0.1 . 端口可以任意,只要没有被占用即可,这里选9090

服务端通信部分的关键代码只有三个:
from flask import Flask,request

requestapp = Flask(__name__)
@app.route('/test', methods=['POST'])     #/test可以任意设, 请求端保持一致即可
def xxxxx():
    j_data= request.get_data()
    xxxx=func_all(j_data)
    return str(xxxx)

if __name__=="__main__":
    app.run(host='127.0.0.1',port=9090, debug=False)    这就是开启服务的代码

2.算法部署

因为已经确定使用http传输协议,所以只要定好服务及端口地址就好,像调用一个普通函数一样来进行通信.,下面接受请求端的请求,并接受两个参数,求和后返回值(要字符串),一般最好是格式话的数据返回(比如json格式),方便请求端解析数据.

(1)python算法服务(server.py)

import jsondef func_all(j_data):data=json.loads(j_data)para1= int(data["x1"])para2=int(data["x2"])print(para1,para2)return str(para1+para2)from flask import Flask, requestapp = Flask(__name__)
@app.route('/test', methods=['POST'])
def just_test():j_data= request.get_data()final_result=func_all(j_data)return str(final_result)if __name__=="__main__":app.run(host='127.0.0.1',port=9090, debug=False) 

次服务开启后,就会如上方所示等待请求

每次请求端请求一次, 服务端会执行一下,如上

客户端请求部分:

import requests
import jsondata = {'x1': '5', 'x2': '33'}
data_j = json.dumps(data)r = requests.post("http://127.0.0.1:9090/test", data=data_j)
print (r.text)

按服务端给出的服务地址及端口,来进行请求,没请求一次会得到结果.

4. 开启自启动

如果是部署在服务器上,就需要考虑实际的使用的问题,所以需要服务端的算法一直在线运行,也就是要考虑服务器每次重启后的自启动问题。

在/etc/profile.d/文件夹下创建一个sh文件。里面的run_server.py就是

#!/bin/bashpython /home/xxx/run_server.py

其中run_server.py就是执行了server.py,这里考虑灵活性,所以加了run_server.py, run_server.py里面可以写入要执行的那些文件。这里仅执行一个server.py文件。

run_server.py文件如下:

import os
import subprocessos.system("conda activate env_add")  #这里为了切换到server的conda环境,如果不想切换环境,可以在默认的环境中增加如下的命令,就是安装需要的依赖库
#os.system("pip install flask")subprocess.run(["python", "/home/xxxxx/server.py"])#根据需要可以增加需要执行的程序,这里只执行这一个脚本文件

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...