【问题标题】:How do you set the most efficient parameters for ThreadPoolExecutor and ProcessPoolExecutor?如何为 ThreadPoolExecutor 和 ProcessPoolExecutor 设置最有效的参数?
【发布时间】:2018-10-18 17:40:25
【问题描述】:

如果我理解正确,ProcessPool 在 CPU 受限时使用它。所以如果我是四核,那是否意味着最有效的 max_workers 是 4?我怎么知道哪个对ThreadPool 最有效,因为如果我理解正确,应该在 I/O 绑定时使用它?

这是使用 python 的 concurrent.futures 的内置函数。

【问题讨论】:

  • 对于 cpu 绑定的 ProcessPool,4 是最大值(之后它们只是竞争时间),但您可能会发现越少越快,具体取决于您机器上的其他负载。对于 I/O 绑定的 ThreadPool,它完全与您正在等待的事物的响应时间有关。例如,从磁盘读取(速度快,工作人员少)与远程网络抓取(速度较慢,工作人员多)相比。

标签: python multithreading concurrency multiprocessing


【解决方案1】:

tdelaney 的评论!

你必须测量它。


我通常使用 tdelaney 概述的方法来获得对该程序的总体感觉。您的大部分程序是解析 JSON 还是 HTML?比它受 CPU 限制。是在发出 db/http/network 请求吗? IO绑定

然后我参数化所有工作/进程/线程池以允许从启动时对其进行配置。然后使用来自 tdelaney 的分析执行测试,以确定默认配置值应该是什么。然后是workload is applied and measured,处理延迟、吞吐量、错误等。然后调整配置选项,并应用相同的工作负载。


有很多很棒的性能测试工具:

  • ab
  • vegeta
  • siege
  • 消息队列/代理通常公开一个 http 接口,因此可以使用上述工具之一加载积压,或以一致的吞吐率应用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2014-08-14
    • 2021-03-08
    • 2011-11-25
    • 1970-01-01
    • 2022-12-18
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多