我正在运行一台GRPC服务器。 说:本地主机,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)
当我从命令行运行它时,哪个运行正常:
python
client = Client(“ localhost”,46001)
my_dict = {'timestamp':1555421947,'additional_info':{}}
client.set_status(my_dict)
我面临的问题是,从以下4个进程创建对服务器的GRPC客户端调用时:
client = Client("localhost", 46001)
client.set_status(some_dict)
该进程意外终止。没有日志被进一步打印。我已经处理了所有异常,即使在上述代码调用周围也是如此。
到目前为止,我唯一的推断是:GRPC不适用于新产生的进程。
有人可以帮助我解决这个问题吗?
答案 0 :(得分:0)
gRPC Python客户端支持使用环境变量GRPC_ENABLE_FORK_SUPPORT=1
进行多重处理。
但是,gRPC Python服务器的fork支持故事更加复杂(请参见https://github.com/grpc/grpc/issues/18321)。