test_py_server.py 2.3 KB
Newer Older
B
barrierye 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# pylint: disable=doc-string-missing

B
barrierye 已提交
16 17 18
from pyserver import Op
from pyserver import Channel
from pyserver import PyServer
B
barrierye 已提交
19 20


B
barrierye 已提交
21 22
# channel data: {name(str): data(bytes)}
class ImdbOp(Op):
B
barrierye 已提交
23
    def preprocess(self, input_data):
B
barrierye 已提交
24 25 26
        x = input_data[0]['words']
        feed = {"words": np.array(x)}
        return feed
B
barrierye 已提交
27 28

    def postprocess(self, output_data):
B
barrierye 已提交
29 30 31 32 33 34 35 36 37 38
        data = {"resp": fetch_map["prediction"][0][0]}
        return data


class CombineOp(Op):
    def preprocess(self, input_data):
        cnt = 0
        for data in input_data:
            cnt += data['resp']
        return {"resp": cnt}
B
barrierye 已提交
39 40 41 42 43 44


read_channel = Channel(consumer=2)
cnn_out_channel = Channel()
bow_out_channel = Channel()
combine_out_channel = Channel()
B
barrierye 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
cnn_op = ImdbOp(
    inputs=[read_channel],
    outputs=[cnn_out_channel],
    server_model="./imdb_cnn_model",
    server_port="9393",
    device="cpu",
    client_config="imdb_cnn_client_conf/serving_client_conf.prototxt",
    server_name="127.0.0.1:9393",
    fetch_names=["prediction"])
bow_op = ImdbOp(
    inputs=[read_channel],
    outputs=[bow_out_channel],
    server_model="./imdb_bow_model",
    server_port="9292",
    device="cpu",
    client_config="imdb_bow_client_conf/serving_client_conf.prototxt",
    server_name="127.0.0.1:9292",
    fetch_names=["prediction"])
combine_op = CombineOp(
    inputs=[cnn_out_channel, bow_out_channel], outputs=[combine_out_channel])
B
barrierye 已提交
65 66 67

pyserver = PyServer()
pyserver.add_channel(read_channel)
B
barrierye 已提交
68 69 70
pyserver.add_channel(cnn_out_channel)
pyserver.add_channel(bow_out_channel)
pyserver.add_channel(combine_out_channel)
B
barrierye 已提交
71 72 73
pyserver.add_op(cnn_op)
pyserver.add_op(bow_op)
pyserver.add_op(combine_op)
B
barrierye 已提交
74
pyserver.prepare_server(port=8080, worker_num=1)
B
barrierye 已提交
75
pyserver.run_server()