AI实战:AI模型部署系列之多进程
AI实战:AI模型部署系列之docker
AI实战:AI模型部署系列之多进程
本文分享部署AI模型的经验:多进程。
本文使用开源框架flask实现多进程,在 AI实战:AI模型部署系列之docker 基础之上实现。
干货
代码框架简单如下:
refuse_service.py
import os, time, sys, re
from flask import Flask, request
import multiprocessing
import tensorflow as tf
def process(pipe, thread_id):
#子进程处理函数
import refuse
recognizer = refuse.RefuseRecognize()#识别垃圾类,在进程中定义
while True:
params = pipe.recv()#子进程接收数据
img_url = params['img_url']
image_data = tf.gfile.FastGFile(img_url, 'rb').read()
res = recognizer.recognize_image(image_data)#识别垃圾主函数
#print('classify:\n%s' %(res))
res = {"res": res}
pipe.send(res)#发送结果给主进程
q = multiprocessing.Queue()
pipes = []
app = Flask(__name__)
@app.route('/refuse', methods=['POST']) #post方法
def recognize_refuse():
params = request.json #接收json格式数据
if 'img_url' not in params:
return '{"error": 101}'#101表示参数错误
tp = q.get(block=True, timeout=30)#设置超时时间30S #取可用的子进程
pipes[tp].send(params) #向子进程发送数据
res = pipes[tp].recv() #接收子进程发过来的数据
#print(35, res)
q.put(tp, block=False) #回收当前子进程
return res
if __name__ == '__main__':
if len(sys.argv) == 4:
for k in range(0, int(sys.argv[3])):
pipe = multiprocessing.Pipe(duplex=True)
q.put(k, block=False)
worker = multiprocessing.Process(target=process, args=(pipe[1], k))
pipes.append(pipe[0])
worker.daemon = True
worker.start()
app.run(host=sys.argv[1], port=int(sys.argv[2]), threaded=True)
- 说明
用法:
python refuse_service.py 0.0.0.0 6007 2
0.0.0.0:ip
6007:端口
2:开启的进程数量
安装环境
pip install flask
开启服务
docker创建过程具体详见:AI实战:AI模型部署系列之docker
-
步骤
进入docker:
sudo docker exec -it refuse_classify-tensorflow-1.4.0-py3 env LANG=C.UTF-8 /bin/bashcd /data/refuse_recognize
开启服务
bash run_service.sh
测试
使用 RESTClient 测试
具体步骤如下图: