繁体   English   中英

grpc-Python max_workers 限制并发进程数

[英]grpc-Python max_workers limiting number of simultaneous processes

在使用 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

我可以用这个重现同样的问题。

要重现它,只需在一个窗口中使用 max_workers=4 运行route_guide_server.py ,然后尝试在不同的窗口中运行 4-5 个不同的客户端。 第 4 个客户端必须等到其中一个客户端完成。 (为了获得更好的视图,在 yield 添加 time.sleep)

如果大量客户端(100 和 1000 多个客户端)想要通过流(应该是连续的)在 python 中访问 grpc 服务器,那么客户端将永远不会有机会。

是的,这是预期的行为。

运行我自己的测试代码后,是的,如果您向 max_workers 提供 None 参数,则 40 是最大值。 但是,如果我将最大值设置为 100,那么我肯定最多可以有 100 个并发工作人员。 这应该是预期的行为,因为线程池是根据请求的工作线程数量创建的。 你不能指望如果你不提供大量的最大工人,它只会在运行时扩大和缩小。 并非没有改变 grpc 和并发期货线程池。 按照接口的耦合方式,现在在python grpc中我们必须使用concurrent futures threadpool,所以如果我们想要max_workers大于40就必须提供一个参数,并且必须在编译时设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM