I want to send tasks to the POOL inside the shared class based on some conditions. But I got some unexpected result, Which are shown below.
• Why the len(self.map) is 0, not 100.
• Do I have to reconstruct my code to achieve this goal.
from multiprocessing import Pool
from multiprocessing.managers import BaseManager
pool = None
def doSomething(obj, *args):
    obj.doSomething(*args)
class SharedClass:
    def __init__(self):
        global pool
        self.map = set()
        pool = Pool(4)
    def someCondition(self):
        # the condition is rely on the instance, here is just an example
        return True
    def go(self, n):
        global pool
        for i in xrange(n):
            if self.someCondition():
                # pass the shared class to other process
                pool.apply_async(doSomething, (self, i))
        pool.close()
        pool.join()
        # got AssertionError here
        # why the len of self.map is 0
        assert len(self.map) == 100
    def doSomething(self, n):
        # this should change the same SharedClass instance?
        self.map.add(n)
class MyManager(BaseManager):
    pass
MyManager.register("SharedClass", SharedClass)
def main():
    manager = MyManager()
    manager.start()
    obj = manager.SharedClass()
    obj.go(100)
if __name__ == "__main__":
    main()