io密集型和cpu密集型_计算密集型(机器学习、深度学习)-Python Web服务

本文使用 Zhihu On VSCode 创作并发布

快速上手

Python部署对外访问的算法服务,往往是很多小型算法公司的痛点,因为虽然有很多Python的Web库,但是往往都是针对IO请求的,但是我们机器学习往往都是CPU或者GPU,所以固然需要使用到多进程。

通常针对上述问题,我们通常的解决方法如下:

  • Socket中加入多进程
  • 直接使用tf-service
  • 建立一个生产者消费者,用多进程去消费队列
  • 直接使用FastApi+gunicorn

今天我们就是直接使用FastApi+gunicorn的方式进行实现

下面直接上代码:

'''
@Author: TangZhiFeng
@LastEditors: TangZhiFeng
@LastEditTime: 2020-06-06 17:58:21
@Description: 算法服务
'''
import uvicorn
from fastapi import FastAPI
from offline.sorted import sorted_videos

app = FastAPI()

@app.post("/video_recommended") #这个就是定义请求方式POST,路由是/video_recommended
def video_recommended(user_id: int, last: str): # 定义请求的参数
  	# sorted_videos.timely_file_generate_suggestion_single 这是一个需要计算的函数
    # 通常这里可以替换成任意一个算法的接口
    code = sorted_videos.timely_file_generate_suggestion_single(user_id, last)
    result = {
        "code": code,
        "code_describe" : "200:请求正常,400:缺少用户点赞信息文件"
    }
    # 返回一个dict, 这里会将这个dict转化成json类型
    return result

直接使用gunicorn:

gunicorn -k uvicorn.workers.UvicornWorker -w8 -b 0.0.0.0:8003 service:app

-k 					对应着我使用的这个uvicorn
-w8 				代表8个进程
-b					定义算法服务的host:port
service:app	service对应当前这个文件

这里再提一句FastApi这个python web框架,真的很简单,而且在浏览器直接访问https://host:port/docs可以直接出现算法服务的接口,并且可以直接访问测试。

222f644c4ea1491cd069aded6239978b.png
image-20200608101323939

截止到这里,一个快速上手的教程就结束了,另外gunicorn中会出现,重复加载模型的问题,在这里可以看参考资料[1]中直接定义,或者直接看gunicorn的文档。

参考资料

  1. 机器学习web服务化实战:一次吐血的服务化之路 - haolujun - 博客园
  2. gunicorn官方文档
  3. fastapi文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值