Python: процесс, вызывающий GRPC-сервер, застревает и неожиданно завершает работу - PullRequest
1 голос
/ 16 апреля 2019

У меня работает один сервер GRPC. скажем: localhost, 46001

У меня есть программа на Python, которая создает пул процессов из 4 процессов. Здесь пул процессов настраивается:

Process_Pool(Process): have a process dict with 4 running process context.

Я сохранил этот пул процессов для моего варианта использования. Примечание : эта функциональность работает нормально, как я тестировал без участия GRPC.

Клиентская реализация GRPC имеет вид:

class Client(object):

def __init__(self, host, port):
    self.host = host
    self.server_port = port
    self.channel = grpc.insecure_channel("{}:{}".format(self.host, self.server_port))
    self.stub = some_server_pb2_grpc.SomeInterfaceStub(self.channel)

Что работает нормально, когда я запускаю его из командной строки:

питон

client = Client ("localhost", 46001)

my_dict = {'отметка времени': 1555421947, 'дополнительная_информация': {}}

client.set_status (my_dict) * * тысячу двадцать-один

Проблема, с которой я сталкиваюсь при создании запроса клиента GRPC к серверу из этих 4 процессов, таких как:

client = Client("localhost", 46001)
client.set_status(some_dict)

Процесс неожиданно завершается. Никакие журналы не напечатаны далее. Я обработал каждое исключение, даже вокруг приведенного выше кода вызова.

Мое единственное заключение до сих пор: GRPC не работает с вновь порожденными процессами.

Может кто-нибудь помочь мне в решении этой проблемы?

1 Ответ

0 голосов
/ 17 апреля 2019

клиент Python gRPC поддерживает многопроцессорную обработку с переменной среды GRPC_ENABLE_FORK_SUPPORT=1.

Однако история поддержки форка для сервера Python gRPC более сложна (см. https://github.com/grpc/grpc/issues/18321).

...