并行Python使分形和资源在pp下序列化

并行Python使分形和资源在pp下序列化,python,python-2.7,fractals,parallel-python,Python,Python 2.7,Fractals,Parallel Python,我制作了一个python脚本来制作分形图像 我尝试使用pp python模块来加快源代码的速度 最大的问题是:image.putpixel((x,y),(i%8*16,i%4*32,i%2*64))。 这行源代码在像job一样使用时,请告诉我一些关于: cPickle.unpicklableError:无法pickle对象 我认为这个资源不能在pp下序列化。有什么想法吗?非常感谢。问候 我的源代码: from PIL import Image #size of image imgx = 600

我制作了一个python脚本来制作分形图像

我尝试使用pp python模块来加快源代码的速度

最大的问题是:image.putpixel((x,y),(i%8*16,i%4*32,i%2*64))。 这行源代码在像job一样使用时,请告诉我一些关于: cPickle.unpicklableError:无法pickle对象

我认为这个资源不能在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")
从PIL导入图像
#图像大小
imgx=600
imgy=400
#生成图像缓冲区
image=image.new(“RGB”,(imgx,imgy))
#分形面积
xa=-2.0
xb=2.0
ya=-2.0
yb=2.0
#定义常数
最大迭代次数=10次#允许的最大迭代次数
阶跃导数t=0.002e-1#数值导数的步长
误差=5e-19#允许的最大误差
#函数将生成牛顿分形
def f(z):返回z*z+复数(-0.31,0.031)
#为每个y和x绘制衍生分形
对于范围内的y(imgy):
zy=y*(yb-ya)/(imgy-1)+ya
对于范围内的x(imgx):
zx=x*(xb-xa)/(imgx-1)+xa
z=复数(zx,zy)
对于范围内的i(最大迭代次数):
#求复数值导数
dz=(f(z+络合物(阶跃导数,阶跃导数))-f(z))/络合物(阶跃导数,阶跃导数)
#牛顿迭代法见维基百科
z0=z-f(z)/dz
#停止错误
如果abs(z0-z)<错误:
打破
z=z0
#我使用模运算表达式做RGB颜色的像素
image.putpixel((x,y),(i%8*16,i%4*32,i%2*64))
#保存结果
image.save(“fractal.png”、“png”)

并行Python或多处理模块要求需要传递给其他进程的对象是可拾取的,而来自PIL的图像对象不是

我建议从要并行化的函数中删除对image.putpixel的调用,返回一个简单的RGB点列表或可拾取的numpy数组。然后,在计算完成后,您可以组装图像


此外,为了获得更具体的建议,您还应该发布代码的并行版本。

我尝试这样做。接缝对我来说更复杂。为什么?因为我可以返回列表。Seam pp和调用函数over:job=job_server.submit在全局定义方面存在一些问题。我尝试的方法是:我做2个函数。一个是:def newton_分形(z):返回z*z+复数(-0.31,0.031)。我做的下一个函数是:最大的问题是image.putpixel((x,y),(I…我需要使用ob=job\u server.submit)(make_fractal,我不知道如何编写这2个函数,因为这2个函数相互依赖。关于pp的一个很好的教程是如何将普通python代码转换为pp,因为存在一些限制。关于我使用pp模块的代码非常混乱。不起作用。