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"])#根据需要可以增加需要执行的程序,这里只执行这一个脚本文件

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...