【搭建属于你的科研平台】(一)基于flask的服务器端算法框架搭建

背景

在CS、EE相关的领域,我们往往会做一些实验。比如smart health,近几年学术界希望做到device free,即不需要任何的贴片传感器贴在人体身上,通过手机自带的传感器,实现一个app获取、分析、返回结果。

坦白说科研圈子的代码功底无法与工业界的技术大佬们相比,因此如果基于android框架在手机端开发一套能够手机本地处理的算法。一方面手机的运算能力较弱、另一方面需要考虑UI、事务线程的分层。往往算法部分用matlab、python是比较常见的。

此demo以手机端安卓应用为例+后端算法(部署于服务器)基于flask-server搭建。旨在于搭建一套能够将手机端的文件:*.csv / .wav / .txt/ .xlsx/ ……等科研结果传输到服务器,算法处理完结果后以http response的方式返回。手机端可自行编写handler方法,进行toast等方式的UI显示。

主要步骤

接下来讲解如何从0开始搭建这个框架:

1. Python搭建虚拟环境:

原本打算使用docker的方式,这样本地测试完毕基本上就docker一包上云开始用。考虑到阿里云服务器的存储资源有限,就不装镜像占硬盘了~还是一个项目一个虚拟环境吧。

修改conda 和 pip为清华镜像源

pip方法

  • 临时使用: 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
    例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent,这样就会从清华这边的镜像去安装gevent库。
  • 永久修改,一劳永逸:
  1. linux下,修改~/.pip/pip.conf(没有就创建一个), 修改 index-url至tuna,内容如下:
[global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple
  1. windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下
 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

conda 方法

用pip的virtualenv创建虚拟环境

  • 安装虚拟环境的第三方包 virtualenv : pip install virtualenv
  • 使用清华源安装:pip install -i https://pypi.python.org/simple/ virtualenv

创建虚拟环境

cd 到存放虚拟环境的地址,比如cd ~/IT/algo-backend/
virtualenv venv 在当前目录下创建名为ENV的虚拟环境(如果第三方包virtualenv安装在python3下面,此时创建的虚拟环境就是基于python3的)
virtualenv -p /usr/local/bin/python3.6 venv 参数 -p 指定python版本3.6创建虚拟环境venv
virtualenv --system-site-packages venv 参数 --system-site-packages 指定创建虚拟环境时继承系统三方库
note:由于flask推出初版时间为2010年,更倾向于python3+,尽量使用python3.5以后的版本。

激活/退出虚拟环境

cd ~/algo-backend 跳转到虚拟环境的文件夹
source venv/bin/activate 激活虚拟环境
pip list 查看当前虚拟环境下所安装的第三方库
deactivate 退出虚拟环境

基于conda创建虚拟环境

  • 创建虚拟环境 conda create -n Algo-One-Backend python==3.7

这样就创建了一个名字为ENV,基于python版本3.6的一个虚拟环境了。注意,这里和pip建立的虚拟环境不同,pip建立的虚拟环境会直接在当前目录下生成一个虚拟环境的目录,激活虚拟环境也需要指定这个目录才行。而conda安装的虚拟环境,只会把虚拟环境的目录生成在anaconda安装目录下的env目录下。所以,conda创建的虚拟环境有一个很大的优点就是不用指定虚拟env的路径,不过前提是你需要把conda的环境变量早早设置好。

  • 激活/退出虚拟环境
    source activate Algo-One-Backend 激活虚拟环境
    source deactivate 退出虚拟环境

  • 安装所需的第三方库
    conda install -n Algo-One-Backend [package] 其中-n代表 name: Algo-One-Backend 指定了该虚拟环境
    也可以在激活虚拟环境的状态下运行pip install [package]

  • 查看conda环境下所有的虚拟环境
    conda info --envs

删除虚拟环境

直接删除虚拟环境所在目录即可

2. 安装依赖

  • 安装requirements.txt,如下预提供一份,自行创建requirements.txt后,将以下内容复制即可
backcall==0.1.0
Click==7.0
decorator==4.4.1
Flask==1.1.1
Flask-SocketIO==4.2.1
gevent==1.4.0
greenlet==0.4.15
gunicorn==20.0.4
ipython==7.10.1
ipython-genutils==0.2.0
itsdangerous==1.1.0
jedi==0.15.1
Jinja2==2.10.3
joblib==0.14.1
MarkupSafe==1.1.1
numpy==1.17.4
pandas==0.25.3
parso==0.5.1
pexpect==4.7.0
pickleshare==0.7.5
prompt-toolkit==3.0.2
ptyprocess==0.6.0
Pygments==2.5.2
python-dateutil==2.8.1
python-engineio==3.11.2
python-socketio==4.4.0
pytz==2019.3
scikit-learn==0.22
scipy==1.3.3
six==1.13.0
sklearn==0.0
traitlets==4.3.3
wcwidth==0.1.7
Werkzeug==0.16.0
  • 安装依赖文件,pip install -r requirements.txt
  • 使用过程中如果安装了新的包,可以通过pip freeze > requirements.txt更新该依赖文件。

3. 本地运行flask后端

4. 部署到服务器(实验室服务器or公有云)

  • 按照1.步骤中ssh到服务器,把虚拟环境搭建起来
  • 把本地测试完的文件通过ftp的方式传输到server
  • 把自己的文件正式部署完
  • gunicorn.conf.py里面默认定义线程为3个,提高响应能力。大家在里面定义自己的程序端口,用之前先看一下系统中哪些端口已经被占用了 netstat -ntulp一大段列表里面找8888以后空余的端口。
  • 依次使用端口8888\8889\8890\8891…… 然后发现8890还没人用,就把gunicorn.conf.py的端口改掉
  • 由于想要让程序一直在后台运行,命令改为nohup gunicorn demo.app:app -c gunicorn.conf.py 就可以了

5. 附录

注意点:flask 包导入的问题:如果没有写过多层级的flask模块,大家可能在文件分层管理会遇到一些困难。 Python在不同目录下导入模块的方法

发布了1 篇原创文章 · 获赞 2 · 访问量 70

猜你喜欢

转载自blog.csdn.net/qq_37221583/article/details/104069940