【发布时间】:2013-09-02 09:17:30
【问题描述】:
我刚接触 Python,我仍处于学习曲线的陡峭阶段。谢谢你前面的任何cmets。
我有一个很大的 for 循环要运行(在多次迭代的意义上很大),例如:
for i in range(10000)
for j in range(10000)
f((i,j))
我认为如何并行化它是一个常见问题,经过数小时的谷歌搜索后,我使用“多处理”模块得出了解决方案,如下所示:
pool=Pool()
x=pool.map(f,[(i,j) for i in range(10000) for j in range(10000)])
这适用于循环较小的情况。但是,如果循环很大,它真的很慢,或者如果循环太大,有时会出现内存错误。似乎 python 会首先生成参数列表,然后将列表提供给函数“f”,即使使用 xrange。那是对的吗?
所以这种并行化对我不起作用,因为我并不真的需要将所有参数存储在一个列表中。有一个更好的方法吗?我感谢任何建议或参考。谢谢。
【问题讨论】:
-
简而言之:这没有任何意义,因为 Python 使用了全局解释器锁,它可以防止多个线程同时运行。如果您使用 Jython 或 IronPython,您可能仍然有一些好处。 wiki.python.org/moin/GlobalInterpreterLock
-
@GiulioFranco 虽然他使用的是
multiprocessing,而不是threading,所以GIL 没有发挥作用。
标签: python list parallel-processing multiprocessing