您可以序列化函数字节码,然后在调用方上对其进行重构。所述编组模块可以用于串行化处理的代码对象,然后可将其重新组装成一个函数。即:
import marshal
def foo(x): return x*x
code_string = marshal.dumps(foo.func_code)
然后在远程过程中(在传输code_string之后):
import marshal, types
code = marshal.loads(code_string)
func = types.FunctionType(code, globals(), "some_func_name")
func(10) # gives 100
一些警告:
元帅的格式(与此有关的任何python字节码)在主要python版本之间可能不兼容。
仅适用于cpython实现。
如果该函数引用了您需要使用的全局变量(包括导入的模块,其他函数等),则也需要对它们进行序列化,或在远程端重新创建它们。我的示例只是为它提供了远程进程的全局名称空间。