这是我第一次在这里提问,所以我会尝试描述。我对python和tensorflow比较陌生,并且专门为一个项目学习它。
我目前正在使用tensorflow服务和使用wsgi的flask来部署tensorflow模型。我一直在关注这个架构:https://github.com/Vetal1977/tf_serving_flask_app
我正在tensorflow_model_server
上运行port=9000
。
我知道tensorflow_model_server
正在运行,因为当我从命令行执行tensorflow_serving_client.py
时,我得到了预期的响应。我已在每个用户帐户上测试了此命令行执行。
同样,我知道Flask + WSGI正在工作,因为我可以看到log.info
点落入apache错误日志,因为它在脚本中运行。如果我在它到达相关行之前返回一些东西,它就可以正常工作。
但是,当使用Flask + WSGI执行应用程序时,它会挂起this line:result = stub.Predict.future(request, 5.0) # 5 seconds
(https://github.com/Vetal1977/tf_serving_flask_app/blob/master/api/gan/logic/tf_serving_client.py#L70)
我可以看到它在我监视top
和tail -f error.log
时挂起,并看到同样的apache进程坐在那里直到它被杀死或apache重新启动。
我真的坚持认为它在通过命令行执行时有效,但在Flask + WSGI运行它时却没有。任何人都可以提供建议或指出我正确的方向吗?我带着这个走向正确的道路吗?任何协助都将不胜感激。
编辑:我已将最小代码上传到github repo:https://github.com/raymondtri/client-test以及需要使用flask,wsgi,tensorflow和tensorflow-serving的最小设置。
提前致谢,
雷
答案 0 :(得分:0)
经过大量研究和数小时后,我认为这与mod_wsgi分叉处理的方式有关,以及grpc如何解决这个问题。我感觉事情正在变得孤立,因为进程是分叉的,这就是导致脚本挂起的原因。
我可能错了,这只是我目前的假设。