1

I'm working on a class that handles numeric operations to perform with a data array.

Unfortunately I do not get to work by applying a function of the class to the created direct view. I get the error:

, copy)
163     assert len(bufs) >= 2, "not enough buffers!"
164     pf = buffer_to_bytes_py2(bufs.pop(0))
--> 165     f = uncan(pickle.loads(pf), g)
166     pinfo = buffer_to_bytes_py2(bufs.pop(0))
167     info = pickle.loads(pinfo)
AttributeError: Can't get attribute 'calcParallel' on <IPython.core.interactiveshell.DummyMod object at 0x00000000047E4C50>

and the class:

import numpy as np 
import ipyparallel as parallel

class calcParallel():
    def __init__(self):
        self.data = np.random.rand(10,23)

    def calc(self,variables):

        #parallel view
        rc = parallel.Client()
        dview = rc.direct_view()
        dview.block = False

        #Serial
        self.res_serial = [self.__multiply(var) for var in variables]

        #Parallel
        imports = [
                'import numpy as np'
            ]

        #imports
        [dview.execute(imp) for imp in imports]

        #shared data
        dview['data'] = self.data


        #run calculation
        self.pr_list = [dview.apply_async(self.__multiply, var) for var in variables]

        dview.wait(self.pr_list)

        #process results
        self.res_parallel = []

        for r in self.pr_list:
            self.res_parallel.append(r.get())



    def __multiply(self, num):
        return data*num

t = calcParallel()
t.calc(np.random.rand(3))

Pleace help me with my problem and sorry for the bad english

Markus
  • 21
  • 3

1 Answers1

0

f = uncan(pickle.loads(pf), g), It seems the calc function is not the right attribute for pickle, consider to define the calc outside the Class calcParallel

GoingMyWay
  • 16,802
  • 32
  • 96
  • 149