在使用 python grpc 服务器时,
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
这是 grpc 服务器实例化的一般方式。但是在这个运行中,如果我尝试运行超过 10 个 client 实例,它期望服务器流式传输,第 11 个实例不起作用(我正在运行 10 个连接到该服务器并获取流的 client 实例)
即使我将 max_workers 更改为 None,它创建的最大线程数是 40 个线程(根据文档,8 个内核 x 5),因此在这种情况下最多可以同时为 40 个客户端提供服务。
这是预期的行为吗?
我正在处理我的代码,但尝试使用此处记录的通用 grpc python 代码:
https://grpc.io/docs/tutorials/basic/python.html
我可以用这个重现同样的问题。
要重现它,只需route_guide_server.py
在 max_workers= 4 的一个窗口中运行,然后尝试在不同的窗口中运行 4-5 个不同的客户端。第 4 个客户必须等到其中一个客户完成。(为了获得更好的视图,在 yield 中添加 time.sleep)
如果大量客户端(100 和 1000 多个客户端)想通过流(应该是连续的)访问 python 中的 grpc 服务器,那么客户端将永远没有机会。