首页 > 解决方案 > 从另一个类调用函数并使用另一个类对象

问题描述

我有两节课。一个类创建模型(比如说 A 类)(这是耗时功能,所以要消除这个时间延迟,我需要使用 GraphPipe 客户端服务器库)。

另一个类(比如说 B 类)来自 Graphpipe,这个类接收来自客户端的请求,使用生成到类 1 的模型并将响应返回给客户端。

我在主函数中调用 A 类并接受模型训练。obj是对象吗。

目前的问题是,classify_demoMyDict所以我不能从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()

标签: pythonfunctionclass

解决方案


您可以使用装饰器classify_demo将其定义为静态方法。@staticmethod

因此,在GPGHandler课堂上,您可以直接调用MyDict.classify_demo(json.dumps(query)).

不幸的是,我觉得你的问题不是很清楚。也许你应该澄清一点。


推荐阅读