【问题标题】:Python multiprocessing limiting to 10% per core? [duplicate]Python 多处理限制为每个核心 10%? [复制]
【发布时间】:2017-08-04 15:36:37
【问题描述】:

我有一个循环,我一直在尝试加快速度。我注意到 Python 只使用单核,所以我导入了多处理包并设置了一个池。现在整个过程分布在多个内核上,但它们似乎被限制在 ~10 %。

这是预期/最佳的吗?或者有没有办法利用每个核心的更多?

代码:

from multiprocessing.dummy import Pool as ThreadPool

//...more code here...

pool = ThreadPool(os.cpu_count())
pool.starmap(getSubject, zip(range(1, Nsub)))
pool.close()
pool.join()

ps。在使用 Pool 之前,htop 会在 100 % 时显示一个内核,而在 ~0 % 时显示其他内核。

【问题讨论】:

    标签: python multithreading multiprocessing threadpool python-multithreading


    【解决方案1】:

    multiprocessing.dummy.Pool 是一个线程 池。由于 GIL,您不会充分利用多个内核。如果您想改用进程,请将其更改为 multiprocessing.Pool

    请注意,内核的总使用量还取决于 getSubject 的确切用途。如果您正在进行一些同步(例如锁定),那么您也可能会看到性能损失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2013-12-01
      • 2020-07-05
      相关资源
      最近更新 更多