Вызовы GRPC не работают с многопроцессорным процессом python

#python-2.7 #multiprocessing #python-multiprocessing #grpc

#python-2.7 #многопроцессорная обработка #python-многопроцессорность #grpc

Вопрос:

Вызовы GRPC не работают при запуске в нескольких процессах. Но может выполняться любое количество раз при запуске в основном процессе / в одном недавно созданном процессе. Все вызовы GRPC после создания второго нового процесса завершаются с ошибкой.

Я настраиваю сервер GRPC с помощью future.ThreadPoolExecutor: метод start_server()

     some_server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    some_server_pb2_grpc.add_SomeInterfaceServicer_to_server(Server(), some_server)

    # bind the server to the port defined above
    some_server.add_insecure_port('[::]:{}'.format(self.server_port))

    # start the server
    some_server.start()
 

Мой код на python:

 # GRPC TEST - 1 : WORKS!! Single process calling GRPC client

from grpc_module.client import Client
from multiprocessing.process import Process
from utils import send_status_info


send_status_info() # Works

def my_loop():
    for i in range(10):
        send_status_info()

p = Process(target=my_loop)
p.start() # Works
p.join()
 

Но вызовы GRPC начинают завершаться сбоем при выполнении с несколькими процессами.

 # GRPC TEST - 2 : FAILS!! Multiple process calling GRPC client

from grpc_module.client import Client
from multiprocessing.process import Process
from utils import send_status_info


send_status_info()

def my_loop():
    for i in range(10):
        send_status_info()

p = Process(target=my_loop)
p.start()
p.join()

p = Process(target=my_loop)
p.start()
p.join()
 

Связано ли это с унарной настройкой GRPC.

Если да, как я могу реализовать асинхронный GRPC здесь?

Пожалуйста, помогите.

ОБНОВЛЕНИЕ: мои выводы — вызовы GRPC достигают клиентского кода GRPC, но завершаются сбоем при контакте с сервером. При запуске этого с помощью командной строки python, когда он застревает (как показано в методе 2), я нажимаю ctrl C, он завершается трассировкой стека следующим образом:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/multiprocessing/process.py", line 145, in join
    res = self._popen.wait(timeout)
  File "/usr/lib/python2.7/multiprocessing/forking.py", line 154, in wait
    return self.poll(0)
  File "/usr/lib/python2.7/multiprocessing/forking.py", line 135, in poll
    pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt