python - grpc 服务器中 ThreadPoolExecutor 的目的是什么?
问题描述
当我们实例化 gRPC 服务器时,我们传递ThreadPoolExecutor
给它的构造函数:
grpc.server(futures.ThreadPoolExecutor(max_workers=1))
据我所知,Python 有 GIL,它使 CPU 密集型任务的线程毫无用处。
例如,我的 gRPC 服务器提供 TensorFlow 模型和 gRPC 健康检查服务。增加线程池中的线程数对我有什么好处吗?
解决方案
现在 grpc python 绑定到并发期货线程池,我相信路线图显示将来我们将能够使用 asyncio。线程池执行器只允许我们指定最大并发连接数。你是对的,使用 python 我们有 GIL,因此线程被限制在同一个 CPU 内核中,因此我们没有线程的并行性。如果您的任务受 CPU 限制,则它们不会通过添加更多线程在 python 中受益。
线程池中的更多线程是否有任何好处实际上取决于您的应用程序的详细信息。您可以在一个进程中运行 grpc 服务器,在另一个进程中运行 tensorflow(使用多处理模块),这使您可以访问更多内核,但您需要确定将信息从 tensorflow 进程传输到 grpc 服务器的协议。
推荐阅读
- neo4j - 如何提高 GraphQL 请求的性能?
- python - 如何优化此代码(在花药列中找到最接近的字符串)
- c# - 有没有办法使用 asp.net 在浏览器中显示 .DWG 文件
- node.js - 无法使用 cpanel 将 Nestjs 应用程序安装到主机
- python-3.x - sqlalchemy 表中是否可以有 python dict?如果是这样,知道如何声明该字段有什么帮助吗?
- excel - 循环遍历数据验证列表,选择多个工作表以打印到 PDF 或 Excel
- excel - 在 Excel 中使用 Range.Find 方法匹配用户名
- php - 从 PHP 中的 Sentry 事件中获取罪魁祸首
- python - 如果两边都存在,比较结果
- python - 即使我在 Windows 10 上有文件 tests.py,也可以在 0.000 秒内运行 0 次测试