擅长:python、mysql、java
<p>不幸的是,可能没有一个好的方法来做到这一点</p>
<p>python多处理遇到的问题是,它通过创建一个附加进程池来工作。这些进程是原始进程的副本,因此您通常会得到数据的NUM_PROCS副本,每个进程1个。这里有一些警告,但是如果你看到你的内存增加了,很可能是因为你的数据有额外的拷贝</p>
<p>此外,为了让python在进程之间进行通信,它需要序列化参数,将其传递给工作进程,然后将响应序列化回来。在上面的示例中,在worker中进行处理所需的时钟周期非常少。对数据进行pickle和发送可能比实际工作者处理花费的时间更长。如果随着池大小的增加,处理时间没有减少,那么很可能就是这样</p>
<p>您可以尝试以不同的方式分解代码,看看是否可以让某些东西工作,但是,考虑到上面的示例,我认为您不太可能获得加速。有几个不同的池函数可以尝试(我喜欢<code>pool.imap</code>),但它们的基本问题都是一样的</p>
<p>您可以在线阅读有关多处理和全局解释器锁的问题。我发现当子任务需要一段时间时,python多处理非常有用,但对于非常小的任务,开销太大</p>