我正在使用类在Python中进行一些多处理,为了做到这一点,我必须使用这个approach:
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
print cls
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)
问题是'因为我有一些静态方法也应该并行化。但是我found用这个我不能腌制静态方法。我想知道有一种方法可以改变这种方法来做这样的事情,所以我可以腌制非静态和静态方法。
提前谢谢。
答案 0 :(得分:1)
我不确定你要做什么......但是如果你想使用类和multiprocessing
,除非你跳到标准库之外,否则它会很难看。
如果使用名为multiprocessing
的{{1}}的分支,则可以在多处理的pathos.multiprocesssing
函数中直接使用类和类方法。这是因为map
代替dill
或pickle
,而cPickle
可以在python中序列化几乎所有内容。
dill
还提供异步映射函数......它可以pathos.multiprocessing
具有多个参数的函数(例如map
)
请参阅: What can multiprocessing and dill do together?
和: http://matthewrocklin.com/blog/work/2013/12/05/Parallelism-and-Serialization/
map(math.pow, [1,2,3], [4,5,6])