使用 ThreadPool Python 时的最大池大小

Pra*_*pta 7 python threadpool

我正在使用 ThreadPool 来实现多处理。使用多处理时,池大小限制应等于 CPU 核心数。我的问题 - 使用 ThreadPool 时,池大小限制应该是 CPU 核心数吗?

这是我的代码

from multiprocessing.pool import ThreadPool as Pool
class Subject():
    def __init__(self, url):
       #rest of the code
   def func1(self):
      #returns something
if __name__=="__main__":
   pool_size= 11
   pool= Pool(pool_size)
   objects= [Subject() for url in all_my_urls]
   for obj in objects:
     pool.apply_async(obj.func1, ())
   pool.close()
   pool.join()
Run Code Online (Sandbox Code Playgroud)

最大池大小应该是多少?提前致谢。

Ale*_*all 5

不能使用线程进行多处理,只能实现多线程。由于 GIL 的原因,多个线程无法在单个 Python 进程中同时运行,因此多线程仅在运行 IO 繁重工作(例如与互联网交谈)时有用,在这些工作中,它们花费大量时间等待,而不是 CPU 繁重工作(例如数学)始终占据着核心。

因此,如果同时运行许多 IO 繁重的任务,那么拥有这么多线程将会很有用,即使它超过了 CPU 核心的数量。大量线程最终会对性能产生负面影响,但在您实际测量问题之前不要担心。100 个线程之类的应该没问题。