123456789101112131415161718192021222324252627282930 |
- import logging
- import threading
- from easyfl.pb import client_service_pb2_grpc as client_grpc, client_service_pb2 as client_pb, common_pb2 as common_pb
- from easyfl.protocol import codec
- logger = logging.getLogger(__name__)
- class ClientService(client_grpc.ClientServiceServicer):
- """"Remote gRPC client service.
- Args:
- client (:obj:`BaseClient`): Federated learning client instance.
- """
- def __init__(self, client):
- self._base = client
- def Operate(self, request, context):
- """Perform training/testing operations."""
- # TODO: add request validation.
- model = codec.unmarshal(request.model)
- is_train = request.type == client_pb.OP_TYPE_TRAIN
- # Threading is necessary to respond to server quickly
- t = threading.Thread(target=self._base.operate, args=[model, request.config, request.data_index, is_train])
- t.start()
- response = client_pb.OperateResponse(
- status=common_pb.Status(code=common_pb.SC_OK),
- )
- return response
|