Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python外壳:pickle整个状态_Python_Serialization_Memory Management_State_Pickle - Fatal编程技术网

python外壳:pickle整个状态

python外壳:pickle整个状态,python,serialization,memory-management,state,pickle,Python,Serialization,Memory Management,State,Pickle,当使用“ipython”或“code.interact(local=locals())”时,我希望有一种方法将整个程序地址空间保存到pickle文件中,并且类似地,有一种方法加载这样的文件,然后在该上下文中开始执行 由于虚拟内存的存在,对于简单脚本来说,这应该是完全可能的 从局部到全局和全局函数,所有定义的名称(以及它们指向的非孤立对象)都将被pickle。取消勾选时,这些名称将在其原始范围内再次分配 假设程序不使用网络,这样就避免了状态的不连续性 假设程序对于系统时钟的不连续性是容错的,因此也

当使用“
ipython
”或“
code.interact(local=locals())
”时,我希望有一种方法将整个程序地址空间保存到pickle文件中,并且类似地,有一种方法加载这样的文件,然后在该上下文中开始执行

由于虚拟内存的存在,对于简单脚本来说,这应该是完全可能的

从局部到全局和全局函数,所有定义的名称(以及它们指向的非孤立对象)都将被pickle。取消勾选时,这些名称将在其原始范围内再次分配

假设程序不使用网络,这样就避免了状态的不连续性

假设程序对于系统时钟的不连续性是容错的,因此也没有问题

唯一的挑战似乎是如何处理文件描述符。理想情况下,如果这还不存在,那么应该有一个简单的“文件描述符pickle”函数,它可以获取打开时使用的模式位、文件光标的位置以及文件内容的校验和(如果尝试取消勾选时校验和不匹配,则会出错)

是否有几行代码可以完成“整个会话的酸洗”?

为此,我会使用它,它可以序列化python中的几乎所有内容

>>> import dill
>>> 
>>> def foo(a):
...   def bar(x):
...     return a*x
...   return bar
... 
>>> class baz(object):
...   def __call__(self, a,x):
...     return foo(a)(x)
... 
>>> b = baz()
>>> b(3,2)
6
>>> c = baz.__call__
>>> c(b,3,2)
6
>>> g = dill.loads(dill.dumps(globals()))
>>> g
{'dill': <module 'dill' from '/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/site-packages/dill-0.2a.dev-py2.7.egg/dill/__init__.pyc'>, 'c': <unbound method baz.__call__>, 'b': <__main__.baz object at 0x4d61970>, 'g': {...}, '__builtins__': <module '__builtin__' (built-in)>, 'baz': <class '__main__.baz'>, '_version': '2', '__package__': None, '__name__': '__main__', 'foo': <function foo at 0x4d39d30>, '__doc__': None}
Dill还可以帮助您理解代码失败时导致酸洗失败的原因。

为此,我使用它,它可以序列化python中的几乎所有内容

>>> import dill
>>> 
>>> def foo(a):
...   def bar(x):
...     return a*x
...   return bar
... 
>>> class baz(object):
...   def __call__(self, a,x):
...     return foo(a)(x)
... 
>>> b = baz()
>>> b(3,2)
6
>>> c = baz.__call__
>>> c(b,3,2)
6
>>> g = dill.loads(dill.dumps(globals()))
>>> g
{'dill': <module 'dill' from '/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/site-packages/dill-0.2a.dev-py2.7.egg/dill/__init__.pyc'>, 'c': <unbound method baz.__call__>, 'b': <__main__.baz object at 0x4d61970>, 'g': {...}, '__builtins__': <module '__builtin__' (built-in)>, 'baz': <class '__main__.baz'>, '_version': '2', '__package__': None, '__name__': '__main__', 'foo': <function foo at 0x4d39d30>, '__doc__': None}
Dill还可以帮助您了解代码失败时导致酸洗失败的原因。

另请参见:和:另请参见:和: