我有一台GRPC服务器在运行。说:localhost,46001
我有一个python程序,它正在创建一个包含4个进程的进程池。这里的Process Pool是自定义的:
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 = {'timestamp':1555421947,'additional_info':{}}
client.set_status(my_dict)
我面临的问题是,在创建GRPC客户端时,从这4个进程调用服务器,例如:
client = Client("localhost", 46001)
client.set_status(some_dict)
该过程意外终止。没有日志进一步打印。我已经处理了每个异常,甚至围绕上面的代码调用。
到目前为止,我唯一的推论是:GRPC不适用于新生成的进程。
任何人都可以帮我解决这个问题吗?
gRPC Python客户端支持使用环境变量GRPC_ENABLE_FORK_SUPPORT=1
进行多处理。
但是,gRPC Python服务器的fork支持故事更复杂(参见https://github.com/grpc/grpc/issues/18321)。