Hi Russell,
Please find below the code for server.

import grpc
from concurrent import futures
import time
import pickle

import pandas as pd
import serverdata_pb2
import serverdata_pb2_grpc

def get_df():
    cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi
A4'],
            'Price': [22000,25000,27000,35000]
            }

    df = pd.DataFrame(cars, columns = ['Brand', 'Price'])
    return df

class DataProviderServicer(serverdata_pb2_grpc.DataProviderServicer):
    def Get_Data(self,request,context):
        get_func = pickle.loads(request.client_class)
        a = get_func()
        df = get_df()
        ans = a.get_hash(df)
        response = serverdata_pb2.result()
        response.result = ans
        return response

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

serverdata_pb2_grpc.add_DataProviderServicer_to_server(
        DataProviderServicer(), server)

print('Starting server. Listening on port 50051.')
server.add_insecure_port('[::]:50051')
server.start()

try:
    while True:
        time.sleep(86400)
except KeyboardInterrupt:
    server.stop(0)

On Thu, Sep 24, 2020 at 9:04 AM Russell Wu <[email protected]> wrote:

> Please also post the log on the server side. It does look like some error
> happened in Get_Data handler on the server. Maybe mismatch of generated
> client_class code between client and server?
>
> On Thu, Sep 24, 2020 at 11:11 AM Jatin Sharma <[email protected]>
> wrote:
>
>> I don't understand the handle terminology. Can you please explain what
>> you mean by handle. Thanks.
>>
>> On Wednesday, September 23, 2020 at 11:08:35 PM UTC+5:30
>> [email protected] wrote:
>>
>>> I would expect there to be more to the error message than just
>>> "client_class". I'm assuming there's an indentation problem in your
>>> original post and that the instantiation of the "client_class" message is
>>> happening within the Get_Data handler. What happens if you try to
>>> instantiate a "client_class" outside of the handler, on the main thread. Do
>>> you get a more illuminating error message?
>>> On Wednesday, September 23, 2020 at 9:20:45 AM UTC-4 Jatin Sharma wrote:
>>>
>>>> I want to send a class to the grpc server. So, I am pickling the class
>>>> and sharing as a bytes format in the message.
>>>> The .proto file(serverdata.proto) looks like below:
>>>>
>>>> syntax = "proto3";
>>>>
>>>> service DataProvider{
>>>>     rpc Get_Data(client_class) returns (result);
>>>> }
>>>>
>>>> message client_class{
>>>>     bytes class_str = 1;
>>>> }
>>>>
>>>> message result{
>>>>     int64 res = 1;
>>>> }
>>>>
>>>> client.py file looks like below:
>>>>
>>>> import grpc
>>>> import serverdata_pb2
>>>> import serverdata_pb2_grpc
>>>> import pickle
>>>> import pandas as pd
>>>>
>>>>
>>>> class Get_Hash():
>>>>     def get_hash(self,df):
>>>>         return pd.util.hash_pandas_object(df).sum()
>>>>
>>>> a = serverdata_pb2.client_class()
>>>> a.class_str = pickle.dumps(Get_Hash)
>>>>
>>>> channel = grpc.insecure_channel('localhost:50051')
>>>> # create a stub (client)
>>>> stub = serverdata_pb2_grpc.DataProviderStub(channel)
>>>> response = stub.Get_Data(a)
>>>>
>>>> print(response.res)
>>>>
>>>> On running this client, I'm getting the following error:
>>>>
>>>> Traceback (most recent call last):
>>>>   File "client.py", line 18, in <module>
>>>>     response = stub.Get_Data(a)
>>>>   File
>>>> "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
>>>> 826, in __call__
>>>>     return _end_unary_response_blocking(state, call, False, None)
>>>>   File
>>>> "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
>>>> 729, in _end_unary_response_blocking
>>>>     raise _InactiveRpcError(state)
>>>> grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that
>>>> terminated with:
>>>> status = StatusCode.UNKNOWN
>>>> details = "Exception calling application: client_class"
>>>> debug_error_string =
>>>> "{"created":"@1600867086.557068214","description":"Error received from peer
>>>> ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
>>>> calling application: client_class","grpc_status":2}"
>>>> >
>>>>
>>>> I'm unable to resolve this error. I checked the type of the pickle
>>>> file. It was 'bytes'. So, I changed the type in the .proto file to bytes.
>>>> I'd be grateful if someone can help me resolve this error.
>>>>
>>>> Regards,
>>>> Jatin
>>>>
>>>>
>>>>
>>>>
>>>> --
>> You received this message because you are subscribed to the Google Groups
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/grpc-io/65656b59-cc4d-40d7-a00f-eef9b8f785ecn%40googlegroups.com
>> <https://groups.google.com/d/msgid/grpc-io/65656b59-cc4d-40d7-a00f-eef9b8f785ecn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAHsNn%2BkEshrmQTXbYq%3D6wC7LD2srXwdohETNfiPo2CRkLUpTGA%40mail.gmail.com.

Reply via email to