开放式烧瓶包装器:烧瓶似乎阻塞了线程



>我正在尝试围绕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)

最新更新