Python: can't pickle module objects error

后端 未结 4 1809
不思量自难忘°
不思量自难忘° 2020-12-16 13:24

I\'m trying to pickle a big class and getting

TypeError: can\'t pickle module objects

despite looking around the web, I can\'t e

4条回答
  •  不思量自难忘°
    2020-12-16 13:50

    Python's inability to pickle module objects is the real problem. Is there a good reason? I don't think so. Having module objects unpicklable contributes to the frailty of python as a parallel / asynchronous language. If you want to pickle module objects, or almost anything in python, then use dill.

    Python 3.2.5 (default, May 19 2013, 14:25:55) 
    [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import dill
    >>> import os
    >>> dill.dumps(os)
    b'\x80\x03cdill.dill\n_import_module\nq\x00X\x02\x00\x00\x00osq\x01\x85q\x02Rq\x03.'
    >>>
    >>>
    >>> # and for parlor tricks...
    >>> class Foo(object):
    ...   x = 100
    ...   def __call__(self, f):
    ...     def bar(y):
    ...       return f(self.x) + y
    ...     return bar
    ... 
    >>> @Foo()
    ... def do_thing(x):
    ...   return x
    ... 
    >>> do_thing(3)
    103 
    >>> dill.loads(dill.dumps(do_thing))(3)
    103
    >>> 
    

    Get dill here: https://github.com/uqfoundation/dill

提交回复
热议问题