ThreadPoolExecutor和ThreadPool之间有什么区别?

5
ThreadPoolExecutorconcurrent.futures 中的线程池与 multiprocessing.dummy 中的 ThreadPool 有什么区别吗?这篇文章表明,ThreadPool 将 "线程"(任务)查询到 CPU 的不同 "线程"。那么 concurrent.futures 是否也是如此,还是 "线程"(任务)将查询到单个 CPU 的 "线程"?
1个回答

7
multiprocessing.dummy.ThreadPoolmultiprocessing.Pool API的一个副本,它使用线程而不是进程,这导致了一些奇怪的问题,因为线程和进程非常不同,包括返回只有它自己能理解的AsyncResult类型。 concurrent.futures.ThreadPoolExecutorconcurrent.futures.Executor的子类,它是一个更新、更简单的API,考虑到了进程和线程,并返回一个通用的concurrent.futures.Future
从一个广泛而远大的角度来看,两者都可以完成相同的任务,但concurrent.futures.ThreadPoolExecutor做得更好。

参考资料:

来自multiprocessing.dummy文档

multiprocessing.dummy复制了multiprocessing的API,但实际上只是对threading模块的一个包装。

特别地,由Pool函数返回一个ThreadPool实例,它是Pool的子类,支持所有相同的方法调用,但使用的是一组工作线程而不是工作进程。

来自multiprocessing.dummy.ThreadPool文档

ThreadPoolPool共享相同的接口,它是围绕进程池设计的,并且在concurrent.futures模块引入之前就存在了。因此,它继承了一些对于由线程支持的池来说没有意义的操作,并且它有自己的类型来表示异步作业的状态,即AsyncResult,这个类型其他库不理解。

用户通常应该优先使用concurrent.futures.ThreadPoolExecutor,它具有更简单的接口,从一开始就是围绕线程设计的,并且返回与许多其他库兼容的concurrent.futures.Future实例,包括asyncio


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接