Вот пример ускорения вычисления множества Мандельброта почти в 2 раза при помощи multiprocessing-а. Ну и не надо забывать что в процессах должны работать реально тяжёлые задачи, иначе в место ускорения можно получить деградацию.
import time
from multiprocessing import Pool
def mandelbrot(cr, ci):
strok, zi, zr, = "", 0.0, 0.0
for i in xrange(5000):
zr2 = zr * zr
zi2 = zi * zi
if zi2 + zr2 > 16:
strok += " "
break
zi = zr * zi * 2 + ci
zr = zr2 - zi2 + cr
else:
strok += "*"
return strok
def str_mandelbrot(nk):
s = []
for y in xrange(*nk):
s.append("".join([ mandelbrot(y/40.0-0.5, x/40.0) for x in xrange(-39,39) ]))
return "\n".join(s)
t = time.time()
pool = Pool(processes=2)
s = pool.map(str_mandelbrot, [(-39, -20), (-20, -1), (-1, 18), (18, 39)])
pool.close()
pool.join()
print 'multiprocessing %.02f' % (time.time() - t)
#print "\n".join(s)
t = time.time()
s = []
for x in [(-39, -20), (-20, -1), (-1, 18), (18, 39)]:
s.append(str_mandelbrot(x))
print 'python %.02f' % (time.time() - t)
print "\n".join(s)
rodegast@rodegast:~$ python ./mandelbrot.py
multiprocessing 3.02
python 5.82
*
*
*
*
*
***
*****
*****
***
*
*********
*************
***************
*********************
*********************
*******************
*******************
*******************
*******************
***********************
*******************
*******************
*********************
*******************
*******************
*****************
***************
*************
*********
*
***************
***********************
* ************************* *
*****************************
* ******************************* *
*********************************
***********************************
***************************************
*** ***************************************** ***
*************************************************
***********************************************
*********************************************
*********************************************
***********************************************
***********************************************
***************************************************
*************************************************
*************************************************
***************************************************
***************************************************
* *************************************************** *
***** *************************************************** *****
****** *************************************************** ******
******* *************************************************** *******
***********************************************************************
********* *************************************************** *********
****** *************************************************** ******
***** *************************************************** *****
***************************************************
***************************************************
***************************************************
***************************************************
*************************************************
*************************************************
***************************************************
***********************************************
***********************************************
*******************************************
*****************************************
*********************************************
**** ****************** ****************** ****
*** **************** **************** ***
************** **************
*********** ***********
** * *** *** * **
* * * *