import thread

from numpy import zeros
import pp
import tables

ARRAYSIZE = 10000


def doSomething(index):
    return index, index*index


class Controller:

    def __init__(self):
        self.file = tables.openFile('pp-test.h5', 'w')
        self.myArray = self.file.createArray(self.file.root, 'myArray',
                                           zeros(ARRAYSIZE, dtype='f'))
        self.lock = thread.allocate_lock()

        self.jobServer = pp.Server()
#        self.jobServer.set_ncpus(1)

    def update(self, (index, val)):
        try:
            self.lock.acquire()
            self.myArray[index] = val
        finally:
            self.lock.release()

    def run(self):
        [self.jobServer.submit(doSomething, (j, ), callback=self.update)
         for j in range(ARRAYSIZE)]

        self.jobServer.wait()


controller = Controller()
controller.run()
print controller.myArray
print controller.myArray[:]
