Вызов функции из другого класса и использование другого объекта класса - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть два класса.Один класс создает модель (скажем, класс A) (это функция, требующая времени, поэтому для устранения этой задержки мне нужно использовать библиотеку клиент-сервер GraphPipe).

Другой класс (скажем, класс B) взят из Graphpipe, этокласс получает запрос от клиента, использует модель, сгенерированную для класса 1, и возвращает ответ клиенту.

Я звоню в класс А по основной функции и обучаю модель.obj это объект.

В настоящее время проблема в том, что classify_demo находится в MyDict, поэтому я не могу вызвать его из GPHandler класса.

Может ли кто-нибудь помочь мне справиться с этой ситуацией стандартным способом программирования?

Дайте мне знать, если что-то неясно или вопрос для меня.

Вот код -

class MyDict(dict):   
    def __init__(self):
        self.train()    

    def train(self):

        retrain = False   
        # Load traind data
        # if not retrain and os.path.isfile(CDATA_FILE):
        print("Loading pickle")
        pos, neg, totals = pickle.load(open(CDATA_FILE,'rb'),encoding='latin1')
        print("Pickle loaded    ")
        return    

    def classify_demo(self, input_data):
        final_result = {}
        data = json.loads(input_data)
        text = data["text"]
        try:
            words = set(word for word in self.negate_sequence(text) if word in pos or word in neg)
            flag, confidence = self.classify2(text)
            if confidence > 0.5:
                sentiment = "Positive" if flag else "Negative"
            else:
                sentiment = "Neutral"
            conf = "%.4f" % self.percentage_confidence(confidence)
            final_result['sentiment'] = sentiment
            final_result['confidence'] = conf

            return json.dumps(final_result)
        except:
            import traceback
            # print traceback.format_exc()
            print("There is some error, please retry with different input")

class GPHandler(server.BaseHTTPRequestHandler):
    def do_POST(self):
        inp = self.rfile.read(int(self.headers['Content-Length']))

        obj = convert.deserialize_request(inp).input_tensors
        d = obj[0].tostring()
        text  = str(d)
        query = {'text':text}
        result = obj.classify_demo(json.dumps(query))
        print(result)
        outp = convert.serialize_infer_response(obj)
        self.send_response(200)
        self.end_headers()
        self.wfile.write(outp)

if __name__ == '__main__':    
    parser = argparse.ArgumentParser()
    parser.add_argument("--port", default=10000, help="TCP port", type=int)
    args = parser.parse_args()
    server_address = ('', args.port) 
    obj = MyDict()
    httpd = server.HTTPServer(server_address, GPHandler)
    print('Starting graphpipe identity server on port %d...' % args.port)

    while(True):
        httpd.handle_request()

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете определить classify_demo как статический метод, используя декоратор @staticmethod .

Поэтому в классе GPGHandler вы можете вызывать напрямую MyDict.classify_demo(json.dumps(query)).

К сожалению, я не нахожу ваш вопрос очень ясным.Возможно, вам следует немного уточнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...