说明

这个资源包是起一个基本的,不带认证的flask服务(异步),提供简单的接口服务。主要应用在微服务系统中。

内容

1 给文件夹起个方便的名字

名称由三部分组成:

  • 1 功能: SimpleAPI
  • 2 版本:v1
  • 3 是否可以分发: open/private

2 文件夹中的几部分

两个文件夹,五个文件(七剑下天山)

2.1 debugs文件夹

这个文件夹下面放若干调试的程序,也可以认为提供了部分文档功能。使用的时候看一眼就知道了。

python搜资源 python资源文件_环境变量


例如里面默认放了一个连通性的测试

import requests as req
# resp = req.get('172.17.0.1:20000/')
resp = req.get('http://127.0.0.1:20000/')
print(resp.text)
print(resp.headers)

2.2 funcs文件夹

将所有需要的函数都放在这里,以一个标准函数包的方式组织。

python搜资源 python资源文件_json_02

2.3 config.py

里面放配置文件,注意可以有n套,默认放了test和prod两个。

import os 
run_env = os.environ.get('ANDY_runenv')
print('>>>当前环境变量', run_env)
if run_env is None:
    print('Note:运行环境变量不可为空(以位置参数附加在entry_sh.sh 启动)')

import os
basedir = os.path.abspath(os.path.dirname(__file__))

# 基类
class Config:
    SECRET_KEY = 'abc'
    BASE_DIR = basedir
    
# 测试环境
class TestConfig(Config):
    pass
# 生产环境
class ProdConfig(Config):
    pass 

config = {
    'test': TestConfig,
    'prod':ProdConfig
}

2.4 entry_py.py

入口函数,环境变量必须要设置才能执行。接口函数在api视图里定义就可了,通常在调试状态使用这个入口程序,修改后服务会自动重载。

import os 
run_env = os.environ.get('ANDY_runenv')
print('>>>当前环境变量', run_env)
if run_env is None:
    print('Note:运行环境变量不可为空(以位置参数附加在entry_sh.sh 启动)')

import os
basedir = os.path.abspath(os.path.dirname(__file__))


from flask import Flask, url_for, request, jsonify,current_app
from config import config
import funcs as ifuncs 


app = Flask(__name__)
# 导入config中设置的配置文件
app.config.from_object(config[run_env])
# 返回中文显示utf8
app.config['JSON_AS_ASCII'] = False
# json dumps 显示utf8 --可能用不上
app.config['ENSURE_ASCII'] = False

@app.route('/', methods=['GET'])
def index():
    res_dict = {}
    res_dict['status'] = True 
    res_dict['msg'] = 'ok'
    res_dict['data'] = None
    return jsonify(res_dict)

# 专门的api函数
@app.route('/api/', methods=['POST'])
def api():
    # ==========  define here ==========
    res_dict = {}
    '''
    Processing
    '''


    res_dict['status'] = True 
    res_dict['msg'] = 'ok'
    res_dict['data'] = None
    # ==========  define here ==========
    return jsonify(res_dict)

if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0',port=5555)

2.5 entry_sh.sh

入口脚本。通常在正式执行时启动,此时会转为异步处理状态。

#!/bin/bash
if [ $1 ];
    then export ANDY_runenv=$1
else 
    unset ANDY_runenv
fi

# python3 entry_py.py

# 前台启动
gunicorn -w 1 -k gevent entry_py:app -b 0.0.0.0:5555 

# 后台启动
# gunicorn -w 1 -k gevent entry_py:app -b 0.0.0.0:5555  >>out1.file  2>&1 & 
# 不输出日志 
# gunicorn -w 1 -k gevent entry_py:app -b 0.0.0.0:5555  1>/dev/null 2>&1 &

2.6 requires_baseweb.txt

这是基本网络服务依赖的python包,可以使用pip3 isntall -r requires_baseweb.txt的方式循环安装。但是其实并不建议这么做,一会看第七个文件。

Jinja2==2.10
pika==0.13.1
pandas==0.23.4
numpy==1.18.0
PyMySQL==0.9.3
configparser==3.5.0
py2neo==4.3.0
pymongo==3.11.0
python-dateutil==2.7.5
Flask==1.0.2
Flask-Script==2.0.6
gunicorn==20.0.4
gevent==1.4.0
flask-wtf==0.14.2
flask_bootstrap==3.3.7.1
markdown==3.3
flask_httpauth==3.2.4
flask_login==0.4.1
Werkzeug==0.14.1
email-validator
requests
tqdm
flask_apscheduler==1.11.0

2.7 说明.md

这个是一些相关的简要说明,要自己安装包,搞环境还是太麻烦。最好的方式是拉取镜像,将文件传到服务器,然后挂载数据卷启动就完事了

# 搭建一个简单的API服务

# 文档

[csdn文章]()

# 文件夹同步

rsync -rvltz  --progress YOUR_PATH/SimpleAPI/ root@YOUR_HOST:/root/test_opt/

# 临时变量

export ANDY_runenv="test"

# 依赖安装镜像(这样就不用管安装包了)

registry.cn-hangzhou.aliyuncs.com/andy08008/base-flask:v2 基础网络镜像 ,0.9G


# 挂载数据卷启动

docker run -idt -v YOUR_HOST:/root/test_opt/:YOUR_Container:/opt/test_opt/ -p YOUR_HOST_Port:YOUR_Container_Port  YOUR_IMAGE bash


# 启动GPU容器的参数
--gpus all

# 开机自启动的参数

--restart=always

如果初次启动忘记了,可以docker container update --restart=always 容器名字

# 覆盖脚本的参数
--entrypoint=""

# bash命令的例子
- 1 bash

- 2 python server1.py

- 3 /bin/echo 'xxx'

以上就是SimpleAPI_v1_open的全部内容。