Python:调用GRPC服务器的进程被卡住并意外终止

时间:2019-04-16 14:32:02

标签: python python-2.7 process multiprocessing grpc

我正在运行一台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不适用于新产生的进程。

有人可以帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

gRPC Python客户端支持使用环境变量GRPC_ENABLE_FORK_SUPPORT=1进行多重处理。

但是,gRPC Python服务器的fork支持故事更加复杂(请参见https://github.com/grpc/grpc/issues/18321)。