美文网首页点亮技术栈
搭建python机器学习restful服务

搭建python机器学习restful服务

作者: 刘笔尖儿 | 来源:发表于2019-04-09 16:58 被阅读0次

    缘起

    因为最近想学习机器学的相关知识,课程也看了几个,书也读了几本,但是还是没有什么清晰的感觉,始终找不到门的钥匙。好像黑崎一护成为死神时,身边无数的丝带,却始终看不见真正的红色的那条。

    既然效果不佳,作为程序员,还是先从代码开始吧。

    因为一直做后台开发,都是对外提供服务。那么同样角度思考机器学习这事儿,除了通过算法计算数据,生成模型外,最重要的应该还是提供能力吧,否则不就只是自嗨版的单机程序了。

    既然这样,那就应该先提供一个服务,输出机器学习的能力。

    因为机器学习的语言特性,直接使用pyhton开发服务。


    搭建

    经过一番查找,确定技术栈:

    1. flask + gunicorn + gevent

    有些还在这基础上通过Supervisor守护进城服务,Nginx做反向代理,因为目前只是自己练习使用,暂时不用。

    简单介绍一下上面几个组件。

    Flask:python实现的一个轻量级微服务框架,基本功能简单,可以通过插件的方式加入其它功能。简单且灵活。

    gunicorn:支持wsgi协议的http容器服务,兼容性强,使用简单。

    gevent:python并发框架,提供系统性能。

    以上三个工具因为之前没有用过,只是简单了解了一下。后续会多总结。

    1. 环境

    Anaconda3 + python3.6

    因为以后可能会加入TensorFlow的功能,目前TensorFlow支持python3.7还有点问题。所以决定使用3.6版本。


    操作

    1. 安装工具

    Anaconda3就是好用,直接查找 flask,gunicorn,gevent 安装即可。都是基本操作,基本无脑。

    这里要注意的一点是,因为使用zsh,多以要想直接使用工具,需要配置zsh的环境变量,把当前用的python环境配置到zsh。否则不能全局使用命令工具。

    1. 新建工程

    这一步其实真是比想象的简单的多的多的多(对python的好感进一步提升)…...

    pyCharm新建一个工程,新建app.py。

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/api/simpleApi')
    def isPerson():
        return 'yeah, I\'m the machine who can compute you!'
    
    if __name__ == '__main__' :
    
        from werkzeug.contrib.fixers import ProxyFix
        app.wsgi_app = ProxyFix(app.wsgi_app)
        app.run()
    
    

    这就是一个微服务,想象Spring的那一套,脑中回想起:"我们不一样……不一样…不一样..."

    1. 运行

    文件目录下,执行:gunicorn -w 2 -b 127.0.0.1:8000 -k gevent app:app

    这里介绍一下gunicorn的参数。

    -w:指定进程的数量,这里配置2,所以下面的输出里启动了两个进程:44227,44228

    -b:指定地址和端口号,如果不指定默认是 localhost:5000

    -k: 指定gunicorn的work-class 模式,默认是sync同步模式,这里通过gevent提升并发能力。

    如果出现下面输出,那就说明服务启动成功。

    [44223] [INFO] Starting gunicorn 19.9.0
    [44223] [INFO] Listening at: http://127.0.0.1:8000 (44223)
    [44223] [INFO] Using worker: gevent
    [44227] [INFO] Booting worker with pid: 44227
    [44228] [INFO] Booting worker with pid: 44228
    

    PostMan 直接访问接口 http://localhost:8000/api/simpleApi

    返回:yeah, I'm the machine who can compute you!

    说明没啥问题。


    然后

    一个简单的python微服务貌似就这么结束了。

    接下来还有更重要的工作,真正要做的才刚开始:

    1. 机器学习赋能,需要实现机器学习的算法功能,实现计算能力
    2. 能力输出,完善web框架的能力,达到企业级程度

    感想

    别人的代码越好用,自己的代码可能就越难写。机器学习这个领域虽然靠代码落地,但是真正支撑它的还是底层的知识结构。如果将理解事物的思维方式限定在代码层面,那对后面的学习还是有很大阻碍的。

    所以代码不是目的,这个一定要定位清楚。

    相关文章

      网友评论

        本文标题:搭建python机器学习restful服务

        本文链接:https://www.haomeiwen.com/subject/gzdiiqtx.html