相关疑难解决方法(0)

是否有一种简单的方法来挑选python函数(或以其他方式序列化其代码)?

我正在尝试通过网络连接传输功能(使用asyncore).是否有一种简单的方法来序列化python函数(在这种情况下,至少,没有副作用)这样的传输?

理想情况下,我希望有一对类似的功能:

def transmit(func):
    obj = pickle.dumps(func)
    [send obj across the network]

def receive():
    [receive obj from the network]
    func = pickle.loads(s)
    func()
Run Code Online (Sandbox Code Playgroud)

python function pickle

90
推荐指数
7
解决办法
5万
查看次数

序列化具有依赖项的python函数

我已经尝试了多种方法来挑选具有依赖关系的python函数,遵循StackOverflow上的许多建议(例如dill,cloudpickle等),但似乎都遇到了一个我无法弄清楚的基本问题.

我有一个主模块,试图从导入的模块中挑选一个函数,通过ssh发送它以进行unickled并在远程机器上执行.

所以主要有:

    import dill (for example)
    import modulea

    serial=dill.dumps( modulea.func )
    send (serial)
Run Code Online (Sandbox Code Playgroud)

在远程机器上:

        import dill
        receive serial
        funcremote = dill.loads( serial )
        funcremote()
Run Code Online (Sandbox Code Playgroud)

如果被腌制和发送的函数是main本身定义的顶级函数,那么一切正常.当它们位于导入的模块中时,加载功能将失败,并显示"未找到模块模块"类型的消息.

模块名称似乎与函数名称一起被腌制.我没有看到任何方法来"修复"pickle以消除依赖关系,或者在接收器中创建一个虚拟模块以成为unpickling的接收者.

任何指针都将非常感激.

--prasanna

python pickle dill

9
推荐指数
1
解决办法
3471
查看次数

酸洗不可酸洗的对象

我正在用 pygame 制作一个绘图程序,我想在其中为用户提供一个选项,即保存程序的确切状态,然后在稍后重新加载它。在这一点上,我保存了我的 globals dict 的副本,然后迭代,酸洗每个对象。pygame 中有一些对象不能被pickle,但可以转换为字符串并通过这种方式进行pickle。我的代码已设置为执行此操作,但是通过引用访问了其中一些不可选择的对象。换句话说,它们不在全局字典中,但它们被全局字典中的对象引用。我想在这个递归中对它们进行腌制,但我不知道如何告诉 pickle 返回它遇到问题的对象,更改它,然后再次尝试对其进行腌制。我的代码真的很杂乱,如果有一种不同的、更好的方式来做我的事情


surfaceStringHeader = 'PYGAME.SURFACE_CONVERTED:'
imageToStringFormat = 'RGBA'
def save_project(filename=None):
    assert filename != None, "Please specify path of project file"
    pickler = pickle.Pickler(file(filename,'w'))
    for key, value in globals().copy().iteritems():
        #There's a bit of a kludge statement here since I don't know how to 
        #access module type object directly
        if type(value) not in [type(sys),type(None)]   and \
        key not in ['__name__','value','key']          and \
        (key,value) not in pygame.__dict__.iteritems() and \
        (key,value) not in sys.__dict__.iteritems()    and \
        (key,value) …
Run Code Online (Sandbox Code Playgroud)

python pygame save pickle savestate

6
推荐指数
1
解决办法
2973
查看次数

通过 dill 序列化带有全局变量的 Python 方法

这是一个示例代码,其中FLAG是全局变量。该方法A.func对我来说是一个黑匣子,因此我不知道它FLAG在序列化之前调用。

import dill as pickle
FLAG = 100

class A:
  def func(self):
    print FLAG * 10

a = A()
dump = pickle.dumps(a.func)
del FLAG
foo = pickle.loads(dump) <-- fail here "NameError: global name 'FLAG' is not defined"
foo()
Run Code Online (Sandbox Code Playgroud)

在相关问题中:

最实用的解决方案是使用cloudpickle. 但似乎dill比 更强大cloudpickle。所以我想坚持使用dill或其他成熟的腌制器。

如果有必要的话,我不介意dill自己修改一些代码。

感谢您提前提供任何帮助:)

python serialization pickle dill

0
推荐指数
1
解决办法
1328
查看次数

标签 统计

pickle ×4

python ×4

dill ×2

function ×1

pygame ×1

save ×1

savestate ×1

serialization ×1