Python: joblib.Parallel method in a class 'TypeError : can't pickle instancementhod objects'
2017-07-25 15:06
776 查看
使用joblib.Parallel并行处理数据是出现TypeError : can’t pickle instancementhod objects 错误
首先是一段函数调用的实现:import joblib import numpy as np def load_data(K, T): return K+T jobs = 8 Ts = np.repeat(np.array([1]), jobs, axis=0) Ks = np.repeat(np.array([1]), jobs, axis=0) with joblib.Parallel(n_jobs=jobs) as parallel: outpout = parallel(joblib.delayed(load_data)(k, s) for k, s in zip(Ks, Ts)) print(output)
这段代码是没有问题的输出 [5, 5, 5, 5, 5, 5, 5, 5]
但是如果在类中进行处理,如下所示:
import joblib import numpy as np class testParallel: def load_data(self, K, T): return K+T del run(self): jobs = 8 Ts = np.repeat(np.array([1]), jobs, axis=0) Ks = np.repeat(np.array([1]), jobs, axis=0) with joblib.Parallel(n_jobs=jobs) as parallel: outpout = parallel(joblib.delayed(load_data)(k, s) for k, s in zip(Ks, Ts))
这样就会出现:TypeError : can’t pickle instancementhod objects错误。这种bug出现的方式是自己找出来的,最后在一篇博客中看到,第一种方法为解决使用joblib和Multiprocessing基于pickling实现并行处理的方法,并且解释了其出现的原因。
为了pickle一个object,object必须是一个全局的变量,这才才可以使unpickle通过(PS:pickle存取结构化的数据)。如果在类中,输出的参数为以下类型:
[('self', 0), ('self', 1), ('self', 2), ('self', 3), ('self', 4), ('self', 5), ('self', 6), ('self', 7), ('self', 8), ('self', 9)]
因此需要在类外对函数进行定义。
相关文章推荐
- python TypeError: can't pickle _thread.RLock objects
- python2,socket多进程的错误pickle.PicklingError: Can't pickle <built-in method recvfrom_into of _socket.soc
- python调用py方法,报错【ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest】
- Error:The method setInputPaths(JobConf, String) in the type FileInputFormat is not
- Python SQLite3的问题sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in th
- 关于The method setMapperClass(Class<? extends Mapper>) in the type Job is not applicable for the argum
- python multiprocessing.Pool - PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
- MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@
- python 编译错误TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
- Android Error - The method replace(int, Fragment) in the type FragmentTransaction is not applicable
- Compiler Error Message: CS0234: The type or namespace name 'BorderDetails' does not exist in the class or namespace 'Infragistics.WebUI.Shared' (are you missing an assembly reference?)
- Python 报错:SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3:
- python中super出现的TypeError: must be type, not classobj 原因及解决
- LNK2005: __thiscall type_info::type_info(class type_info const &) already defined in LIBCMTD.lib
- python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
- python编码错误:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in
- bug—TypeError: only length-1 arrays can be converted to Python scalars
- java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses
- java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetada
- JNI DETECTED ERROR IN APPLICATION: can't call void XXX on instance of java.lang.Class <XXX>解决方案