Created
July 16, 2011 14:17
-
-
Save bnyeggen/1086393 to your computer and use it in GitHub Desktop.
Revisions
-
bnyeggen created this gist
Jul 16, 2011 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,47 @@ 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)