from multiprocessing import Pool from functools import partial def _pickle_method(method): func_name = method.im_func.__name__ obj = method.im_self cls = method.im_class if func_name.startswith('__') and not func_name.endswith('__'): #deal with mangled names cls_name = cls.__name__.lstrip('_') func_name = '_' + cls_name + func_name return _unpickle_method, (func_name, obj, cls) def _unpickle_method(func_name, obj, cls): for cls in cls.__mro__: try: func = cls.__dict__[func_name] except KeyError: pass else: break return func.__get__(obj, cls) import copy_reg import types copy_reg.pickle(types.MethodType, _pickle_method, _unpickle_method) class someClass(object): def __init__(self): pass def f(self, x=None): #can put something expensive here to verify CPU utilization if x is None: return 99 return x*x def go(self): pool = Pool() print pool.map(self.f, range(10)) if __name__=='__main__': sc = someClass() sc.go() x=[someClass(),someClass(),someClass()] p=Pool() filled_f=partial(someClass.f,x=9) print p.map(filled_f,x) print p.map(someClass.f,x)