我是否需要多核CPU才能利用Python多处理模块? 另外,有人可以告诉我它是如何工作的吗?
答案 0 :(得分:2)
multiprocessing
要求操作系统启动一个或多个新进程,运行相同版本的Python和相同版本的脚本。它还可以设置管道或其他方式直接在它们之间共享数据。
它通常像魔术一样运作;当你在引擎盖下窥视时,有时它看起来像是制作香肠,但你通常可以理解香肠研磨机。 multiprocessing
文档可以很好地解释事情(它们很长,但是有很多东西需要解释)。如果您需要更多的知识,那么文档链接到源代码,这是非常易读的Python代码。如果您在阅读后有特定问题,请回到SO并提出具体问题。
与此同时,如果没有多核,您可以获得<{1}}的一些的好处。
main 的好处 - 模块设计的原因 - 是速度的并行性。很明显,如果没有4个内核,您不会将时间减少到25%。但有时,即使使用单核,您实际上也可以获得一点加速,特别是如果该核具有“超线程”或类似技术。我见过时间降到80%,甚至60%。更常见的是,它们会高达108%(因为你确实从超线程中获得了一小部分好处,但是开销成本高于增益)。但请尝试使用您的代码并查看。
与此同时,您将获得所有附带好处:
multiprocessing
和其他技术也可以做到这一点。您也可以在没有多个进程的情况下使用asyncio
模块。有时您只需要模块的更高级API,但是您希望将它与线程一起使用; multiprocessing
这样做。并且您可以在几行代码中来回切换以双向测试。或者,如果模型符合您的要求,您可以使用更高级别的multiprocessing.dummy
包装器。除了通常更简单之外,它还允许您通过在一行中更改一个单词来在线程和进程之间切换。
此外,围绕concurrent.futures.ProcessPoolExecutor
重新设计程序会使您更进一步将其重新设计为在多台独立计算机上运行的分布式系统。它迫使你处理诸如你的任务如何沟通而不能分享所有内容之类的问题,而不会强迫你处理更多问题,比如他们如何在没有可靠联系的情况下进行沟通。