многопроцессорный процесс grpc связывает асинхронный обратный вызов StatusCode.UNAVAILABLE - PullRequest
0 голосов
/ 23 декабря 2018

запрос grpc в процессе

from multiprocessing import Process, Manager

def frames_process(self):
    # fork process 
    self.frames_flag.value = True
    self.f_process = Process(target=self.frames_handle)
    self.f_process.start()

В frames_handle запросит сервер через клиента grpc, и в результате будет выполнен обратный вызов через default_cb async

def default_cb(call_future):
    try:
        resp = call_future.result()
        logging.info("default_cb called {}".format(resp))
        return resp
    except Exception as e:
        logging.error("future_callback error: {}".format(e))

Я использую Python2 и grpc

Ошибка: StatusCode.UNAVAILABLE

Заранее спасибо.

1 Ответ

0 голосов
/ 26 декабря 2018

Мне не ясно из фрагментов кода, как именно ваш клиентский код предназначен для работы или когда он вызывает fork (через многопроцессорную библиотеку), но клиенты gRPC Python по умолчанию не совместимы с системным вызовом fork.Если вы разветвляетесь в любое время после создания канала Python gRPC, это может объяснить ошибки, с которыми вы сталкиваетесь.Вы можете попробовать запустить переменную окружения GRPC_ENABLE_FORK_SUPPORT=1, которая была добавлена ​​в gRPC Python v1.15.0 для включения поддержки разветвления на стороне клиента.

...