ThreadPoolExecutor 和 ThreadPool 有什么区别

Cha*_*Ken 7 python multithreading threadpool python-3.x

ThreadPoolExecutorfromconcurrent.futuresThreadPoolfrom有区别吗multiprocessing.dummy?本文建议ThreadPool“线程”(任务)查询到CPU的不同“线程”上。是否concurrent.futures做同样的事情或者“线程”(任务)查询CPU的单个“线程”?

ljm*_*jmc 8

multiprocessing.dummy.ThreadPool是 API 的副本multiprocessing.Pool,它使用线程而不是进程,这会导致一些奇怪的情况,因为线程和进程非常不同,包括返回AsyncResult只有它理解的类型。

\n

concurrent.futures.ThreadPoolExecutor是一个子类concurrent.futures.Executor,它是一个更新的更简单的 API,在开发时考虑了进程和线程,因此返回一个通用的concurrent.futures.Future.

\n

从非常广泛和长远的角度来看,两者的作用相同,但concurrent.futures.ThreadPoolExecutor做得更好。

\n
\n

参考:

\n

multiprocessing.dummy文档中:

\n
\n

multiprocessing.dummy复制多处理的 API,但只不过是模块的包装器threading

\n

特别是,Pool提供的函数multiprocessing.dummy返回 的实例ThreadPool,它是 的子类,Pool支持所有相同的方法调用,但使用工作线程池而不是工作进程。

\n
\n

multiprocessing.dummy.ThreadPool文档中

\n
\n

AThreadPool与 共享相同的接口Pool,它是围绕进程池设计的,并且早于该concurrent.futures模块的引入。因此,它继承了一些对于线程支持的池来说不有意义的操作,并且它有自己的类型来表示异步作业的状态,AsyncResult这是任何其他库都无法理解的。

\n

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

\n
\n