gpt4 book ai didi

python - grpc-Python max_workers 限制同时进程数

转载 作者:行者123 更新时间:2023-12-01 08:09:38 31 4
gpt4 key购买 nike

使用 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 个不同的客户端。第四个客户必须等待其中一位客户完成。 (为了获得更好的 View ,在yield中添加一个time.sleep)

如果大量客户端(数百个和数千个客户端)想要通过流式传输(应该是连续的)访问 python 中的 grpc 服务器,那么更多的客户端将永远没有机会。

最佳答案

是的,这是预期的行为。

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

关于python - grpc-Python max_workers 限制同时进程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338451/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com