Python grpc服务器中ThreadPoolExecutor的用途是什么?

Python grpc服务器中ThreadPoolExecutor的用途是什么?,python,multithreading,grpc,Python,Multithreading,Grpc,当我们实例化gRPC服务器时,我们将ThreadPoolExecutor传递给其构造函数: grpc.server(futures.ThreadPoolExecutor(max_workers=1)) 正如我所知,Python有GIL,它将线程用于CPU限制的任务 例如,我的gRPC服务器提供Tensorflow模型和gRPC健康检查服务。增加线程池中的线程数量对我有什么好处吗?现在grpc python与并发未来线程池绑定,我相信路线图显示将来我们将能够使用asyncio。threadpoo

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

grpc.server(futures.ThreadPoolExecutor(max_workers=1))
正如我所知,Python有GIL,它将线程用于CPU限制的任务


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

现在grpc python与并发未来线程池绑定,我相信路线图显示将来我们将能够使用asyncio。threadpool executor只允许我们指定最大并发连接数。你是对的,在python中我们有GIL,因此线程被限制在同一个CPU核心上,因此我们没有与线程的并行性。如果您的任务是CPU受限的,那么在python中添加更多线程对它们没有好处


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

谢谢大家!!有一个问题,如果我设置了
max_workers=1
,当另一个服务程序或过程(带有模型)正在运行时,运行状况检查服务程序是否会阻塞?如果我增加工人数量,它会阻止吗?是的,它会阻止。如果您有max_workers 1,并且有某个连接,则该worker将在第一次连接时被消耗,从而阻止任何其他连接,直到第一次断开连接为止。如果将worker增加到2,则最多可以有2个并发连接。