【问题标题】:Python multithreading max_workersPython 多线程 max_workers
【发布时间】:2017-03-22 10:22:47
【问题描述】:

根据ThreadPoolExecutordocumentation

如果max_workersNone 或未给出,它将默认为机器上的处理器数。

如果我不设置这样的值

ThreadPoolExecutor(max_workers=None)

如果我的价值非常低 (2) 是否对性能不利? python 是否已经为 None 值分配了所有 CPU 进程,而不是为带有数字的值分配 2 个?

【问题讨论】:

    标签: python multithreading cpu


    【解决方案1】:

    首先,您似乎在链接中引用了错误的文档部分,即用于进程而不是线程的部分。 one for concurrent.futures.ThreadPoolExecutor 声明:

    3.5版更改:如果max_workersNone或未给定,则默认为机器上的处理器数量,乘以5,假设经常使用ThreadPoolExecutor而不是CPU重叠I/O工作,并且工作人员的数量应该高于 ProcessPoolExecutor 的工作人员数量。


    由于您使用的是线程,而不是进程,因此假设您的应用程序受 IO 限制,而不是 CPU 限制,并且您将其用于concurrency, not parallelism。您使用的线程越多,您将实现的并发性越高(在一定程度上),但您获得的 CPU 周期越少(因为会有上下文切换)。您必须在典型工作负载下检测您的应用程序,以查看最适合您的方法。对此没有普遍的最佳解决方案。

    【讨论】:

    • 我正在使用 python 2.7 - 在这种情况下会是什么?我的意思是问,如果我设置限制是否重要,以防我想要我需要的最大工人(例如,我调用 4 个方法)
    • @Dejell 首先,请注意您链接到 Python 3.5 文档。无论如何,我的观点是你需要尝试不同的值来看看什么对你有用。无论是您还是 Python 标准库的作者,都无法提前猜出最适合您的情况。如果性能对您很重要,我不会依赖默认的隐含数字。
    • 谢谢。这个“默认隐含数字”是什么?也许我遗漏了一些东西——python会为那个默认数字“分配”内存,还是我只写一个execute.submit()?
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2023-03-10
    • 2018-06-26
    • 2023-03-08
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多