python - grpc server 中 ThreadPoolExecutor 的作用是什么?

标签 python multithreading grpc

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

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

据我所知,Python 具有 GIL,它会无用地使用线程来执行 CPU 密集型任务。

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

最佳答案

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

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

关于python - grpc server 中 ThreadPoolExecutor 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372729/

相关文章:

python - 应用列范围函数时,如何从数据框中的不同列中获取某些值?

用于分布式拍卖模拟的python包

Python 快速从 int 到 string 的转换

c++ - 创建一个类来存储线程并调用它们

c - 线程的缓存在退出时是否刷新到主内存?

java - ConcurrentModificationException - Memcached 设置并从多线程获取

python-3.x - Protobuf 和 Python : How to add messages to "repeatable Any" field?

python - pysftp Paramiko PasswordRequiredException:私钥文件已加密

java - gRPC 客户端重新连接逻辑导致服务器端打开重复的流

python - 在双向调用上存储客户端连接