diff --git a/doc/UWSGI_DEPLOY.md b/doc/UWSGI_DEPLOY.md new file mode 100644 index 0000000000000000000000000000000000000000..02c0488d1bc0c43e050421e0991125fb3a4d644e --- /dev/null +++ b/doc/UWSGI_DEPLOY.md @@ -0,0 +1,58 @@ +# 使用uwsgi启动HTTP预测服务 + +在提供的fit_a_line示例中,启动HTTP预测服务后会看到有以下信息: + +```shell +web service address: +http://10.127.3.150:9393/uci/prediction + * Serving Flask app "serve" (lazy loading) + * Environment: production + WARNING: This is a development server. Do not use it in a production deployment. + Use a production WSGI server instead. + * Debug mode: off + * Running on http://0.0.0.0:9393/ (Press CTRL+C to quit) +``` + +这里会提示启动的HTTP服务是开发模式,并不能用于生产环境的部署。Flask启动的服务环境不够稳定也无法承受大量请求的并发,实际部署过程中配合需要WSGI(Web Server Gateway Interface)使用。 + +下面我们展示一下如何使用[uWSGI](https://github.com/unbit/uwsgi)模块来部署HTTP预测服务用于生产环境。 + +编写HTTP服务脚本 + +```python +#uwsgi_service.py +from paddle_serving_server.web_service import WebService +from flask import Flask, request + +#配置预测服务 +uci_service = WebService(name = "uci") +uci_service.load_model_config("./uci_housing_model") +uci_service.prepare_server(workdir="./workdir", port=int(9500), device="cpu") +uci_service.run_server() + +#配置flask服务 +app_instance = Flask(__name__) +@app_instance.before_first_request +def init(): + global uci_service + uci_service._launch_web_service() + +service_name = "/" + uci_service.name + "/prediction" +@app_instance.route(service_name, methods=["POST"]) +def run(): + return uci_service.get_prediction(request) + +#run方法用于直接调试中直接启动服务 +if __name__ == "__main__": + app_instance.run() +``` + +使用uwsgi启动HTTP服务 + +```bash +uwsgi --http :9000 --wsgi-file uwsgi_service.py --callable app_instance --processes 4 +``` + +使用--processes参数可以指定服务的进程数,请注意目前Serving HTTP 服务暂时不支持多线程的方式使用。 + +更多uWSGI的信息请参考[uWSGI使用文档](https://uwsgi-docs.readthedocs.io/en/latest/) diff --git a/python/paddle_serving_client/__init__.py b/python/paddle_serving_client/__init__.py index f66601a9f8ef8f7284a893d84458651accbfab2c..03542de7481c24b0b21b72635e541b77f60d6d16 100644 --- a/python/paddle_serving_client/__init__.py +++ b/python/paddle_serving_client/__init__.py @@ -18,7 +18,6 @@ import os from .proto import sdk_configure_pb2 as sdk from .proto import general_model_config_pb2 as m_config import google.protobuf.text_format -import time import sys int_type = 0 @@ -156,8 +155,7 @@ class Client(object): ) else: if self.predictor_sdk_ is None: - timestamp = time.time() - self.add_variant('default_tag_{}'.format(timestamp), endpoints, + self.add_variant('default_tag_{}'.format(id(self)), endpoints, 100) else: print(