我有一个docker容器,它接收图像的URL,使用urllib2
将图像下载到内存,使用Tensorflow对其进行一些处理,然后返回JSON数据。
代码结构如下:
myapp.py
from flask import Flask
from flask_restful import reqparse, abort, Api, Resource, inputs
import my_tensorflow
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('url')
class MyApp(Resource):
def post(self):
c = my_tensorflow.MyTensorflow(args['url'])
c.create_graph()
returned = c.run_inference_on_image()
return {'results': returned}
api.add_resource(MyApp, '/myapp')
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
my_tensorflow.py
import numpy as np
import tensorflow as tf
import urllib2
class MyTensorflow:
def __init__(self, url):
self.imageUrl = imageUrl
def create_graph(self):
with tf.gfile.FastGFile("/path/to/model.pb", 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
_ = tf.import_graph_def(graph_def, name='')
def run_inference_on_image(self):
image_string = urllib2.urlopen(self.imageUrl).read()
with tf.Session() as sess:
...
...
return a_text_value
容器适用于大约20个请求。大约20个请求后,它停止响应,只响应“内部服务器错误”。我似乎无法解决这个问题。我在我的代码中放入了打印语句,以查看它在哪些地方没有响应或出错,但是docker logs
docker logs
没有显示任何有趣的内容。以下是它的内容:
172.17.42.1 - - [13/Feb/2017 21:12:02] "POST /myapp HTTP/1.1" 500 -
当容器无响应时(以internal server error
回复),docker stats
会返回此信息:
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
docker_container 0.01% 2.475 GB/8.255 GB 29.99% 5.328 MB/2.036 MB
使用docker restart
重新启动容器后,一切都会重新开始。
我不确定会出现什么问题以及如何解决问题?