【发布时间】:2018-12-14 09:09:52
【问题描述】:
我有以下代码:
def decorator(func):
@functools.wraps(func)
def other_func():
print('other func')
return other_func
@decorator
def func():
pass
如果我尝试腌制func,一切正常。但是,如果我将模块编译为 Cython 扩展,它将失败。
这是错误:
>>>> pickle.dumps(module.func)
PicklingError: Can't pickle <cyfunction decorator.<locals>.other_func at 0x102a45a58>: attribute lookup other_func on module failed
如果我使用dill 而不是pickle,也会发生同样的情况。
你知道怎么解决吗?
【问题讨论】:
-
您是否尝试为
def other_func():指定return? -
是的,其实是一样的。为什么你认为它会有所帮助?
-
我现在无法对此进行测试,但是:这具体是 Cython 问题吗?这段代码可以与纯 Python 一起使用吗? (我不认为应该可以腌制其他函数中定义的函数,但我认为 dill 应该可以工作。不过我可能是错的......)
-
是的,它像纯 Python 一样工作。如果不添加
@functools.wraps(func),就无法腌制,但它可以工作。dill没有这个也可以工作,但在 Cython 案例中失败。
标签: python cython decorator pickle dill