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

是否有一种简单的方法来腌制python函数(或以其他方式序列化其代码)?,第1张

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

您可以序列化函数字节码,然后在调用方上对其进行重构。所述编组模块可以用于串行化处理的代码对象,然后可将其重新组装成一个函数。即:

import marshaldef foo(x): return x*xpre_string = marshal.dumps(foo.func_pre)

然后在远程过程中(在传输pre_string之后):

import marshal, typespre = marshal.loads(pre_string)func = types.FunctionType(pre, globals(), "some_func_name")func(10)  # gives 100

一些警告:

  • 元帅的格式(与此有关的任何python字节码)在主要python版本之间可能不兼容。

  • 仅适用于cpython实现。

  • 如果该函数引用了您需要使用的全局变量(包括导入的模块,其他函数等),则也需要对它们进行序列化,或在远程端重新创建它们。我的示例只是为它提供了远程进程的全局名称空间。

  • 您可能需要做更多的工作来支持更复杂的情况,例如闭包或生成器函数。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5143190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存