[英]Pickling error: Can't pickle <type 'function'>
I am wondering what this error might mean: 我想知道这个错误可能意味着什么:
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
I understand that it has something to do with using multiple cores. 我知道它与使用多个核心有关。 I am running my program on a cluster and using 15 threads in this line of my code:
我在一个集群上运行我的程序,并在我的代码行中使用15个线程:
gauss2 = PTSampler(ntemps, renwalkers, rendim, lnlike, lnprior, threads=15)
The sampler in question is the one documented for the Parallel Tempering sampler at http://dan.iel.fm/emcee/current/user/pt/ 有问题的采样器是在http://dan.iel.fm/emcee/current/user/pt/上为Parallel Tempering采样器记录的采样器。
Any idea what this error might mean? 知道这个错误可能意味着什么吗?
The error means you are trying to pickle a builtin FunctionType
… not the function itself. 该错误意味着您正在尝试挑选内置的
FunctionType
...而不是函数本身。 It's likely do to a coding error somewhere picking up the class of the function instead of the function itself. 这可能是某个地方的编码错误,而不是函数本身。
>>> import sys
>>> import pickle
>>> import types
>>> types.FunctionType
<type 'function'>
>>> try:
... pickle.dumps(types.FunctionType)
... except:
... print sys.exc_info()[1]
...
Can't pickle <type 'function'>: it's not found as __builtin__.function
>>> def foo(x):
... return x
...
>>> try:
... pickle.dumps(type(foo))
... except:
... print sys.exc_info()[1]
...
Can't pickle <type 'function'>: it's not found as __builtin__.function
>>> try:
... pickle.dumps(foo.__class__)
... except:
... print sys.exc_info()[1]
...
Can't pickle <type 'function'>: it's not found as __builtin__.function
>>> pickle.dumps(foo)
'c__main__\nfoo\np0\n.'
>>> pickle.dumps(foo, -1)
'\x80\x02c__main__\nfoo\nq\x00.'
If you have a FunctionType
object, then all you need to do is get one of the instances of that class -- ie a function like foo
. 如果你有一个
FunctionType
对象,那么你需要做的就是获得该类的一个实例 - 即像foo
这样的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.