Python-线程池类似于多处理池?

发布于 2021-02-02 23:22:19

是否有用于工作线程的Pool类,类似于多处理模块的Pool类?

我喜欢例如并行化地图功能的简单方法

def long_running_func(p):
    c_func_no_gil(p)

p = multiprocessing.Pool(4)
xs = p.map(long_running_func, range(100))

但是,我希望这样做而不会产生新流程的开销。

我知道GIL。但是,在我的用例中,该函数将是IO绑定的C函数,python包装器将在实际函数调用之前为其释放GIL

我必须编写自己的线程池吗?

关注者
0
被浏览
175
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    我刚刚发现模块中实际上 有一个基于线程的Pool接口multiprocessing,但是它有些隐藏并且没有正确记录。

    可以通过导入

    from multiprocessing.pool import ThreadPool
    

    它是使用包装Python线程的虚拟Process类实现的。可以找到基于线程的Process类multiprocessing.dummy,在docs中对其进行了简要介绍。该虚拟模块应该提供基于线程的整个多处理接口。



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    在Python 3中,你可以使用concurrent.futures.ThreadPoolExecutor,即:

    executor = ThreadPoolExecutor(max_workers=10)
    a = executor.submit(my_function)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看