python服务调用-基于http的通信写协议(flask)-linux

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

要点主要两方面: 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 json


def 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, request

app = 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 json


data = {'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/bash


python /home/xxx/run_server.py

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

run_server.py文件如下:

import os
import subprocess


os.system("conda activate env_add")  #这里为了切换到server的conda环境,如果不想切换环境,可以在默认的环境中增加如下的命令,就是安装需要的依赖库
#os.system("pip install flask")

subprocess.run(["python", "/home/xxxxx/server.py"])#根据需要可以增加需要执行的程序,这里只执行这一个脚本文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值