Lin*_*ang 8 python flask gunicorn tensorflow
我在一个简单的flask服务器中包装我的tensorflow模型,我正在gunicorn为flask服务器添加wsgi .当我运行gunicorn并试图发送一个请求来调用我已经导入到烧录服务器的火车功能时,我从命令行参数解析得到一个错误:
absl.flags._exceptions.UnrecognizedFlagError:未知的命令行标志'b'
我知道当gunicorn绑定地址参数时会传递这个标志,因为我没有为tensorflow命名为'b'的标志.所以我的问题是tensorflow如何忽略这些tf.app.run()函数不会抱怨的未定义标志?
仅供参考,这是我的服务器结构:
wsgi.py:
from simple_server import app
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
simple_server.py:
from my_tf_model import my_train
@app.route('/call_train', methods=['POST'])
def call_train():
if request.method == 'POST':
training_data = request.json
my_train(training_data, param2)
return('Trained!')
Run Code Online (Sandbox Code Playgroud)
my_tf_model.py:
tf.app.flags.DEFINE_integer('model_version',1, 'version number of the model.')
tf.app.flags.DEFINE_string('work_dir', '', 'Working directory.')
FLAGS = tf.app.flags.FLAGS
def my_train(param1, param2):
# Train Algorithm
export_path_base = FlAGS.work_dir
# Exporting model code
def main(argv):
my_train(param1, param2)
if __name__ == "__main__":
tf.app.run()
Run Code Online (Sandbox Code Playgroud)
更新:
我使用的是tensorflow 1.5.x和python 3.6.0,我用gunicorn是命令:
gunicorn -b 0.0.0.0:5000 -t 30 wsgi:app
我通过在张量流模型中定义这些标志解决了我的问题:my_tf_model.py。
tf.app.flags.DEFINE_string('bind', '', 'Server address')
tf.app.flags.DEFINE_integer('timeout', 30, 'Server timeout')
Run Code Online (Sandbox Code Playgroud)
然后更改我的gunicorn命令行以使用双破折号样式命令行:
gunicorn --bind 0.0.0.0:5000 --timeout 30 wsgi:app
Run Code Online (Sandbox Code Playgroud)
但我认为应该有其他方法而不是这种黑客来解决全局使用的标志。
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |