我有一个循环,我一直在努力加快。我注意到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%。
答案 0 :(得分:1)
multiprocessing.dummy.Pool
是一个主题池。由于GIL,您不会充分利用多个核心。如果您希望使用流程,请将其更改为multiprocessing.Pool
。
请注意,核心的总使用量还取决于getSubject
的确切含义。如果您正在进行某些同步(例如锁定),那么您可能也会看到性能下降。