首页 > 解决方案 > grpc 服务器中 ThreadPoolExecutor 的目的是什么?

问题描述

当我们实例化 gRPC 服务器时,我们传递ThreadPoolExecutor给它的构造函数:

grpc.server(futures.ThreadPoolExecutor(max_workers=1))

据我所知,Python 有 GIL,它使 CPU 密集型任务的线程毫无用处。

例如,我的 gRPC 服务器提供 TensorFlow 模型和 gRPC 健康检查服务。增加线程池中的线程数对我有什么好处吗?

标签: pythonmultithreadinggrpc

解决方案


现在 grpc python 绑定到并发期货线程池,我相信路线图显示将来我们将能够使用 asyncio。线程池执行器只允许我们指定最大并发连接数。你是对的,使用 python 我们有 GIL,因此线程被限制在同一个 CPU 内核中,因此我们没有线程的并行性。如果您的任务受 CPU 限制,则它们不会通过添加更多线程在 python 中受益。

线程池中的更多线程是否有任何好处实际上取决于您的应用程序的详细信息。您可以在一个进程中运行 grpc 服务器,在另一个进程中运行 tensorflow(使用多处理模块),这使您可以访问更多内核,但您需要确定将信息从 tensorflow 进程传输到 grpc 服务器的协议。


推荐阅读