使用 multiprocessing.Process 与 subprocess.Popen 的速度比较

Speed comparison using multiprocessing.Process versus subprocess.Popen

我正在使用Python3执行PYQT代码;同时,我需要调用 Python2.7 代码,用于无法通过 Python3.

执行的操作

我确实通过 Popen 实现了 2.7 代码执行;尽管从 Popen 调用时 运行 2.7 代码需要相当长的时间。如果我直接从 Python2.7.

运行 执行相同的操作,速度会快得多

是否可以使用 multiprocessing 而不是 subprocess.Popen 来达到同样的目的,以加快 2.7 代码的执行速度? 如果合适的话;从 multiprocessing.Process 调用 Python2.7 代码的正确方法是什么?或者使用多进程是一种浪费,因为我只执行一个操作?

multiprocessing 仅在无法 fork 处理的非 POSIX 系统上类似于 subprocess,因此从理论上讲,您可以破解 multiprocessing 以使用不同的解释器。它会比它的价值更麻烦,因为那时你不会在产生 subprocess 和使用 multiprocessing.Process 之间获得任何性能提升(事实上,它可能会由于以下原因而结束得更慢添加到 multiprocessing.Process) 的通信开销。

因此,如果我们只讨论必须在不同解释器中执行的单个任务,那么这将是您所能达到的最快速度。如果有多个任务要在不同的解释器中执行,您仍然可以从 multiprocessing.Process 中受益,方法是将单个子进程生成到 运行 不同的解释器,然后在其中使用 multiprocessing 来分发多个任务在你的核心之上。