2013-02-25 57 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

並行Python或多處理模塊需要需要被周圍傳遞到其它過程的對象是picklable,並從PIL圖像對象是沒有的。

我建議取下呼叫從函數到image.putpixel被並行化,returnin的RGB點或一個numpy的陣列,其是picklable的簡單列表。然後,在計算完成後,您可以組裝圖像。

另外,爲了獲得更具體的建議,您還應該發佈並行版本的代碼。

+0

我嘗試這樣做。 Seam對我更復雜。爲什麼?因爲我可以返回列表。 Seam pp和調用函數結束:job = job_server.submit在全局定義方面存在一些問題。我試圖做到這一點:我做了2個功能。一個是:def newton_fractal(z):return z * z + complex(-0.31,0.031)。我做了一個函數是: – 2013-02-26 14:05:38

+0

大問題是image.putpixel((X,Y),(我......我需要使用OB = job_server.submit(make_fractal,我不知道如何寫這2個功能因爲依賴一個來自另一個關於第一個很好的教程是如何變換正常的Python代碼頁的方式,因爲一些限制。關於我與PP模塊代碼是一個爛攤子。不工作。 – 2013-02-26 14:18:44