我正在使用 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()
最大池大小应该是多少?
提前致谢。
不能使用线程进行多处理,只能实现多线程。由于 GIL 的原因,多个线程无法在单个 Python 进程中同时运行,因此多线程仅在运行 IO 繁重工作(例如与互联网交谈)时有用,在这些工作中,它们花费大量时间等待,而不是 CPU 繁重工作(例如数学)始终占据着核心。
因此,如果同时运行许多 IO 繁重的任务,那么拥有这么多线程将会很有用,即使它超过了 CPU 核心的数量。大量线程最终会对性能产生负面影响,但在您实际测量问题之前不要担心。 100 个线程之类的应该没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)