擅长:python、mysql、java
<p>这个问题有点晚了(才一年!),但我将支持@JakobBowyer回答的“多进程it”部分。</p>
<p>这是<a href="http://en.wikipedia.org/wiki/Embarrassingly_parallel" rel="nofollow noreferrer">embarrassingly parallel</a>问题的一个很好的例子,因为代码的主要部分不会改变自身外部的任何状态。它只需读取输入,执行计算并保存结果。</p>
<p>由于<code>multiprocessing.Pool</code>提供的map函数,Python实际上非常擅长处理这些问题。</p>
<pre><code>from PIL import Image
from multiprocessing import Pool
def thumbnail(image_details):
size, filename = image_details
try:
im = Image.open(filename)
im.thumbnail(size)
im.save("thumbnail_%s" % filename)
return 'OK'
except Exception as e:
return e
sizes = [(120,120), (720,720), (1600,1600)]
files = ['a.jpg','b.jpg','c.jpg']
pool = Pool(number_of_cores_to_use)
results = pool.map(thumbnail, zip(sizes, files))
</code></pre>
<p>代码的核心与@JakobBowyer完全相同,但是我们没有在一个线程中循环运行它,而是将它包装在一个函数中,通过多处理映射函数将它分布在多个核心上。</p>