第一个
我确信我的代码中有一个实现错误,我只是在获取加密方法的PID时遇到了麻烦,我正在尝试使其他调用的开销尽可能小,这样我就可以准确地阅读timeit调用的方法的功能。如果您知道一个更简单的实现,请让我知道。试图找出如何衡量所有的指标已经轻而易举地杀死了我。
我已经尝试了几种不同的方法来获取pid,但是我只想在运行时测量性能。我想,很有可能我必须将其分开并以那种方式运行(而不是多处理)来正确地评估函数。
第一个
我确信我的代码中有一个实现错误,我只是在获取加密方法的PID时遇到了麻烦,我正在尝试使其他调用的开销尽可能小,这样我就可以准确地阅读timeit调用的方法的功能。如果您知道一个更简单的实现,请让我知道。试图找出如何衡量所有的指标已经轻而易举地杀死了我。
我已经尝试了几种不同的方法来获取pid,但是我只想在运行时测量性能。我想,很有可能我必须将其分开并以那种方式运行(而不是多处理)来正确地评估函数。
1条答案
按热度按时间y1aodyip1#
你的代码至少有三个主要的问题。最终的结果是你实际上没有做任何多处理。
第一个问题就在这里,还有其他几个类似的地方:
这段代码传递给Process的不是函数
Encryption
,而是从Encryption()
返回的值。你想要的是:
这段代码告诉Python创建一个新的Process,并在该Process中执行函数Encryption()。
第二个问题与Python处理进程内存的方式有关。每个进程都在自己的内存空间中。每个进程都有自己的全局变量的本地副本,所以你不能在一个进程中设置全局变量,而让另一个进程知道这个变化。有一些机制可以处理这个重要的情况。请参阅“在进程之间共享状态”一节。这里的底线是,您不能简单地在一个进程内设置一个全局变量,并期望其他进程看到这个变化,您必须使用文档中描述的方法之一。
第三个问题是此代码模式,p1和p2都会出现此问题。
这告诉Python创建一个Process并启动它。然后你立即等待它完成,这意味着你当前的Process必须在那个点停止,直到新的Process完成。你从不允许两个Process同时运行,所以没有性能优势。使用多处理的唯一原因是同时运行两个东西。这是你从来不会做的。你还不如根本不用多处理来麻烦,因为它只会让你的生活变得更加困难。
最后,我不知道您为什么决定首先尝试使用多处理。测量内存使用和执行时间的函数几乎肯定非常快,我希望它们比任何同步一个进程到另一个进程的方法都快得多。如果您担心由于诊断函数本身使用的时间而导致错误,我怀疑你能通过多重处理使事情变得更好。为什么不从一个简单的程序开始,看看你会得到什么结果呢?