Я пытаюсь создать сервер-клиентское приложение Python gRPC, следуя этому примеру , но я не могу перевести сервер в своем коде в состояние прослушивания.После добавления кода, почти равного приведенному в примере, и запуска метода start
, все еще ничего не прослушивает указанный порт.Мой код:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import grpc
import interface_pb2
import interface_pb2_grpc
from concurrent import futures
import time
# some other imports...
class GrpcInterface(interface_pb2_grpc.ManipulaMapaServicer):
def CriaItem(self, request, context):
# do stuff...
def LeItem(self, request, context):
# do stuff...
def AtualizaItem(self, request, context):
# do stuff...
def DeletaItem(self, request, context):
# do stuff...
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
def main():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
interface_pb2_grpc.add_ManipulaMapaServicer_to_server(GrpcInterface(), server)
print('Vai iniciar o servidor gRPC na porta ' + str(8888))
server.add_insecure_port('[::]:' + str(8888))
server.start()
try:
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
try:
main()
except Exception as e:
print('Erro ao rodar servidor: ')
print(str(e))
Код для interface_pb2_grpc.ManipulaMapaServicer
, конечно, генерируется автоматически (с помощью команды python3 -m grpc_tools.protoc -I . --python_out=. --grpc_python_out=. interface.proto
) на основе моего interface.proto
:
syntax = "proto3";
message msgItem {
int64 chave = 1;
string valor = 2;
}
message status {
string resposta = 1;
msgItem itemResposta = 2;
}
service ManipulaMapa {
rpc CriaItem (msgItem) returns (status) {}
rpc LeItem (msgItem) returns (msgItem) {}
rpc AtualizaItem (msgItem) returns (status) {}
rpc DeletaItem (msgItem) returns (status) {}
}
Выполнениедостигает цикла while True:
внутри main
, но ни один сервер не работает на порту 8888
.Что здесь может быть не так?Кстати, этот вопрос не является дубликатом этого вопроса, поскольку в последнем вопросе проблема была вызвана сборщиком мусора, который запускался сразу после метода start
.