擅长:python、mysql、java
<p>Python的多处理能力的当前状态对于CPU受限的处理来说不是很好。我害怕告诉您,使用<code>multiprocessing</code>模块无法使它运行得更快,您使用<code>multiprocessing</code>也不是问题所在。在</p>
<p>真正的问题是Python仍然受<a href="http://www.dabeaz.com/GIL/" rel="nofollow">GlobalInterpreterLock(GIL)</a>规则的约束(我强烈建议使用<a href="http://www.dabeaz.com/python/UnderstandingGIL.pdf" rel="nofollow">slides</a>)。关于GIL的工作,已经有了一些令人兴奋的理论和<a href="http://mail.python.org/pipermail/pypy-dev/2012-May/009901.html" rel="nofollow">experimental advances</a>。python3.2事件包含一个新的GIL,它解决了一些问题,但引入了其他问题。在</p>
<p>现在,用一个串行线程执行多个Python进程比在一个进程中运行多个线程要快。这将允许您避免在线程之间获取GIL的问题(通过有效地拥有更多GIL)。但是,只有在Python进程之间的IPC开销没有掩盖处理的好处时,这才是有益的。在</p>
<p>Eli Bendersky写了一篇不错的<a href="http://eli.thegreenplace.net/2012/01/16/python-parallelizing-cpu-bound-tasks-with-multiprocessing/" rel="nofollow">overview article</a>关于他尝试用多处理使CPU绑定的进程运行更快的经验。在</p>
<p>值得注意的是,<a href="http://python.org/dev/peps/pep-0371/" rel="nofollow">PEP 371</a>希望通过引入<code>multiprocessing</code>模块(以前是一个名为<code>pyProcessing</code>的非标准包装)来“绕过”GIL。然而,GIL似乎仍然在Python解释器中扮演了太大的角色,使得它不能很好地与CPU绑定的算法一起工作。许多不同的人都致力于删除/重写GIL,但是没有任何东西能让它成为Python版本。在</p>