您可以序列化函数字节码,然后在调用方上对其进行重构。所述编组模块可以用于串行化处理的代码对象,然后可将其重新组装成一个函数。即:
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实现。
如果该函数引用了您需要使用的全局变量(包括导入的模块,其他函数等),则也需要对它们进行序列化,或在远程端重新创建它们。我的示例只是为它提供了远程进程的全局名称空间。
您可能需要做更多的工作来支持更复杂的情况,例如闭包或生成器函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)