2013-02-25 6 views
0

Я делаю один скрипт python для создания фрактального изображения.Параллельный Python, чтобы сделать фрактал и ресурс сериализованным под pp

Я пытаюсь использовать модуль pp python, чтобы ускорить этот исходный код.

Большая проблема: image.putpixel ((x, y), (i% 8 * 16, i% 4 * 32, i% 2 * 64)). Эта строка исходного кода, когда используется как работа, дайте мне примерно: cPickle.UnpickleableError: Невозможно рассолить объекты.

Я думаю, что этот ресурс не может быть сериализован под pp. Любая идея? Спасибо. С уважением.

Мой исходный код:

from PIL import Image 
#size of image 
imgx = 600 
imgy = 400 
#make image buffer 
image = Image.new("RGB", (imgx, imgy)) 

# area of fractal 
xa = -2.0 
xb = 2.0 
ya = -2.0 
yb = 2.0 

#define constants 
max_iterations = 10 # max iterations allowed 
step_derivat = 0.002e-1 # step size for numerical derivative 
error = 5e-19 # max error allowed 

# function will generate the newton fractal 
def f(z): return z * z +complex(-0.31,0.031) 

# draw derivate fractal for each y and x 
for y in range(imgy): 
zy = y * (yb - ya)/(imgy - 1) + ya 
for x in range(imgx): 
    zx = x * (xb - xa)/(imgx - 1) + xa 
    z = complex(zx, zy) 
    for i in range(max_iterations): 
    # make complex numerical derivative 
    dz = (f(z + complex(step_derivat, step_derivat)) - f(z))/complex(step_derivat,step_derivat) 
    # Newton iteration see wikipedia 
    z0 = z - f(z)/dz 
    # stop to the error 
    if abs(z0 - z) < error: 
    break 
    z = z0 
    #I use modulo operation expression to do RGB colors of the pixels 
    image.putpixel((x, y), (i % 8 * 16, i % 4 * 32,i % 2 * 64)) 

#save the result 
image.save("fractal.png", "PNG") 

ответ

0

Parallel Python или модуль многопроцессорной обработки требуют, чтобы объекты, которые должны быть розданы другим процессам быть пригодны для консервирования, и изображение объекта из PIL нет.

Я рекомендую удалить вызов функции image.putpixel из функции, подлежащей распараллеливанию, возвратить в простой список точек RGB или массив numpy, который является picklable. то после выполнения расчетов вы можете собрать изображение.

Кроме того, чтобы получить более конкретные рекомендации, вы должны также разместить параллельную версию кода.

+0

Я стараюсь это делать. Шов будет более усложняться для меня. Зачем? Потому что я могу вернуть список. Seam pp и вызывающая функция: job = job_server.submit имеет некоторые проблемы с глобальным определением. Я пытаюсь сделать это: я делаю 2 функции. Один из них: def newton_fractal (z): return z * z + complex (-0.31,0.031). Следующая функция, которую я сделал, это: –

+0

Большая проблема - image.putpixel ((x, y), (i ... Мне нужно использовать ob = job_server.submit (make_fractal, я не знаю, как написать эту функцию 2 потому что они зависят друг от друга. Один хороший учебник о том, как преобразовать нормальный код python в pp, потому что это какое-то ограничение. О моем коде с модулем pp беспорядок. –