<p>我对多线程和多处理非常陌生,并尝试使循环并行。我搜索了类似的问题,并基于<a href="https://docs.python.org/2/library/multiprocessing.html#introduction" rel="nofollow noreferrer">multiprocessing</a>模块创建了代码。在</p>
<pre><code>import timeit, multiprocessing
start_time = timeit.default_timer()
d1 = dict( (i,tuple([i*0.1,i*0.2,i*0.3])) for i in range(500000) )
d2={}
def fun1(gn):
for i in gn:
x,y,z = d1[i]
d2.update({i:((x+y+z)/3)})
if __name__ == '__main__':
gen1 = [x for x in d1.keys()]
fun1(gen1)
#p= multiprocessing.Pool(3)
#p.map(fun1,gen1)
print('Script finished')
stop_time = timeit.default_timer()
print(stop_time - start_time)
</code></pre>
<p>在#
输出:</p>
^{pr2}$
<p>如果我更改代码如下:</p>
<pre><code>#fun1(gen1)
p= multiprocessing.Pool(5)
p.map(fun1,gen1)
</code></pre>
<p>我有错误:</p>
<pre><code>for i in gn:
TypeError: 'int' object is not iterable
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
raise self._value
</code></pre>
<p>有什么办法让这个平行吗?MATLAB有一个<code>parfor</code>选项来生成并行循环。我试图用这种方法使循环并行,但它不起作用。有什么办法让循环平行吗?另外,如果函数返回一个值怎么办?如果<code>fun1()</code>返回3个值,我可以写类似<code>a,b,c=p.map(fun1,gen1)</code>的代码吗?在</p>
<p>(在Windows python 3.6上运行)</p>