Closed xuqinghan closed 3 years ago
Hi,
Please note that simpy has moved here: https://gitlab.com/team-simpy/simpy/. I suggest you re-issue your question there, to access a wider community.
To your original question, I don't think that pickling the Environment is currently a SimPy feature. I suggest you implement __getstate__
and __setstate__
for Environment
. If you feel this is of general interest consider contributing your code upstream.
It's there anyway to save/load an env object to harddisk?
demo code as:
I see as simpy based on python's generator which is cant pickle (Why can't generators be pickled?) while generator seems can be dumped under pypy.
so I turn to pypy, but still cant dump “env“ object.
error info is that:
PS D:\tests> pypy3 test_dump.py Start parking at 0 Start driving at 5 Start parking at 7 Start driving at 12 Start parking at 14 env pause Traceback (most recent call last): File "test_dump.py", line 20, in
pickle.dump(env, f)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 1598, in _dump
_Pickler(file, protocol, fix_imports=fix_imports).dump(obj)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 450, in dump
self.save(obj)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 562, in save
self.save_reduce(obj=obj, rv)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 675, in save_reduce
save(state)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 872, in save_dict
self._batch_setitems(obj.items())
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 898, in _batch_setitems
save(v)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 832, in save_list
self._batch_appends(obj)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 859, in _batch_appends
save(tmp[0])
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 802, in save_tuple
save(element)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 562, in save
self.save_reduce(obj=obj, rv)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 675, in save_reduce
save(state)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 872, in save_dict
self._batch_setitems(obj.items())
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 898, in _batch_setitems
save(v)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 832, in save_list
self._batch_appends(obj)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 859, in _batch_appends
save(tmp[0])
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 562, in save
self.save_reduce(obj=obj, rv)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 651, in save_reduce
save(args)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 787, in save_tuple
save(element)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 562, in save
self.save_reduce(obj=obj, rv)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 675, in save_reduce
save(state)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 872, in save_dict
self._batch_setitems(obj.items())
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 898, in _batch_setitems
save(v)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 562, in save
self.save_reduce(obj=obj, *rv)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 646, in save_reduce
save(cls)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 517, in save
f(self, obj) # Call unbound method with explicit self
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 1029, in save_type
return self.save_global(obj)
File "D:\soft\dev\python\pypy3.7-v7.3.5-win64\lib-python\3\pickle.py", line 973, in save_global
(obj, module_name, name)) from None
pickle.PicklingError: Can't pickle <class 'generator'>: it's not found as builtins.generator