>我正在尝试围绕openface api编写一个小烧瓶REST API包装器,以便我可以将图像URL POST
到我的烧瓶服务器,并让它运行图像与分类器模型的比较
app = Flask(__name__)
@app.route('/compare', methods=['POST'])
def compare():
# create arguments object with default classifier and neural net
args = CompareArguments(image)
image = request.json['image']
args.imgs = image
align = openface.AlignDlib(args.dlibFacePredictor)
net = openface.TorchNeuralNet(args.networkModel, imgDim=args.imgDim, cuda=args.cuda)
# call openface and compare image to classifier
infer(args, align, net)
return jsonify({'image': image}), 201
if __name__ == '__main__':
app.run(host='0.0.0.0', threaded=True)
如果我发布这样的图像
curl -i -H "Content-Type: application/json" -X POST http://localhost:5000/compare -d '{"image": [ "../images/examples/clapton-1.jpg"]}'
创建了一个新的 torch 进程,可以在 ps -aux
的输出中看到,但似乎被阻止了,因为它在重新加载服务器之前不会运行
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18184 3284 ? Ss 18:46 0:00 /bin/bash
root 188 3.5 2.4 676060 98320 ? S 19:35 0:00 python ./app.py
root 197 98.7 1.5 202548 62388 ? R 19:35 0:08 /root/torch/install/bin/luajit -e package.path="/root/.luarocks/share/lua/5.1/?.lua;/root/.luarocks/share/lua/5.1/?/init.lua;/root/torch/install
root 211 39.2 1.5 202548 60908 ? R 19:36 0:01 /root/torch/install/bin/luajit -e package.path="/root/.luarocks/share/lua/5.1/?.lua;/root/.luarocks/share/lua/5.1/?/init.lua;/root/torch/install
似乎火炬过程以某种方式被烧瓶阻止了?我已经启用了线程并尝试增加进程的数量。我不确定是什么阻止了这个过程?有什么方法可以调试这个或在 Flask 中线程所需的额外配置吗?
所以 flask 的一个问题是它本身使用线程,所以如果你想让它工作,你需要关闭线程。请使用这个:
if __name__ == '__main__':
app.run(host='0.0.0.0', threaded=False)