python教程—在Python多处理模块中,ThreadPool和Pool有什么区别-Python实用宝典

python教程—在Python多处理模块中,ThreadPool和Pool有什么区别

线程池和多处理模块中的线程池有什么不同?当我尝试我的代码,这是我看到的主要区别:

线程池和多处理模块中的线程池有什么不同?当我尝试我的代码,这是我看到的主要区别:

    from multiprocessing import Pool import os, time print("hi outside of main()") def hello(x): print("inside hello()") print("Proccess id: ", os.getpid()) time.sleep(3) return x*x if __name__ == "__main__": p = Pool(5) pool_output = p.map(hello, range(3)) print(pool_output)

我看到如下输出:

    hi outside of main() hi outside of main() hi outside of main() hi outside of main() hi outside of main() hi outside of main() inside hello() Proccess id: 13268 inside hello() Proccess id: 11104 inside hello() Proccess id: 13064 [0, 1, 4]

与“ThreadPool”:

    from multiprocessing.pool import ThreadPool import os, time print("hi outside of main()") def hello(x): print("inside hello()") print("Proccess id: ", os.getpid()) time.sleep(3) return x*x if __name__ == "__main__": p = ThreadPool(5) pool_output = p.map(hello, range(3)) print(pool_output)

我看到如下输出:

    hi outside of main() inside hello() inside hello() Proccess id: 15204 Proccess id: 15204 inside hello() Proccess id: 15204 [0, 1, 4]

我的问题是:

  • why is the “outside __main__()” run each time in the Pool?

  • multiprocessing.pool。ThreadPool不会生成新进程吗?它只是创建新线程?

  • 如果是这样,那么使用multiprocessing.pool有什么区别呢?线程池,而不仅仅是线程模块?

我没有看到任何关于ThreadPool的官方文档,谁能帮我找到它?

回答

multiprocessing.pool。ThreadPool的行为与多处理相同。池,唯一的区别是使用线程而不是进程来运行worker逻辑。

你看到的原因

    hi outside of main()

通过多处理被打印多次。池是由于池将衍生出 5个独立进程。每个进程将初始化自己的Python解释器并加载模块,从而再次执行顶层打印。

注意,只有在使用衍生进程创建方法时才会发生这种情况(只有在Windows上可用的方法)。如果您使用fork one (Unix),您将只会看到一条关于线程的消息。

multiprocessing.pool。ThreadPool没有文档化,因为它的实现从未完成。它缺乏测试和文档。您可以在源代码中看到它的实现。

我相信下一个自然的问题是:什么时候使用基于线程的池,什么时候使用基于进程的池?

经验法则是:

  • IO绑定作业->多进程。pool. threadpool
  • CPU绑定作业->多进程池
  • 混合作业——>取决于工作负载,我通常更喜欢多处理。池由于流程隔离带来的优点

On Python 3 you might want to take a look at the concurrent.future.Executor pool implementations.

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
2

发表评论