【问题标题】:Is Python multiprocessing intensive on resources?Python 多处理是否占用大量资源?
【发布时间】:2018-05-22 05:23:09
【问题描述】:

由于 GIL 在 CPython 中无法实现受 CPU 限制的并行化。 官方文档建议使用多处理而不是多线程。 那么,如果与支持多处理和多线程中真正并行化的任何其他编程语言(如 Java 或 C++)的多处理/多线程性能相比,使用多进程是否比多线程更占用资源?

【问题讨论】:

  • 这意味着什么? “资源密集”?我会说 Python 通常更“资源密集”(即更慢)。顺便说一句,“官方文档建议使用多处理而不是多线程”?你有报价吗?我敢肯定,它只在某些情况下被推荐,并不总是如此。任何方法都有优点和缺点。无论如何,无论选择哪种语言,线程之间的通信都比进程之间的通信更容易。也就是说,我认为这个问题离题有两个原因:它太宽泛并且主要基于意见。
  • "CPython 实现细节:在 CPython 中,由于全局解释器锁,只有一个线程可以一次执行 Python 代码(即使某些面向性能的库可能会克服这个限制)。如果你想要你的应用程序为了更好地利用多核机器的计算资源,建议使用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor,但是如果要同时运行多个 I/O 密集型任务,线程仍然是合适的模型。 " docs.python.org/3/library/threading.html
  • 没错,“如果您希望您的应用程序更好地利用多核机器的计算资源”,这不是您总是 i> 想要(甚至通常,甚至可能不经常)。

标签: python multithreading multiprocessing python-multiprocessing


【解决方案1】:

除了分叉(类 unix 系统)或重生进程的成本之外,python 中的多处理几乎没有固有的额外成本。费用是当数据或状态需要在进程之间共享时。这可以是从给Pool.map 的可迭代到Manager 中的代理的任何东西。只要与每个流程的工作量相比,这些成本保持在较低水平,它就会被洗掉。 (请注意,由于与 mp 无关的其他原因,python 通常比 java 和 c++ 慢)。

【讨论】:

    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 2014-12-14
    • 2011-12-15
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2015-05-27
    相关资源
    最近更新 更多