我正在构建一个Python存储过程,它将执行一个冗长的过程并返回一个结果。为了提高性能,处理程序代码将用
functools.cache
修饰以缓存结果。以下代码是演示该问题的最小示例:
create or replace function get_key(which varchar) returns varchar
language python runtime_version = '3.11'
packages = ('snowflake-snowpark-python')
handler = 'get_key'
AS $$
import functools
@functools.cache
def get_key(which):
if which == 'PN':
return 'toomanysecrets'
else:
return ''
$$;
select get_key('PN');
错误是
Python解释器错误: AttributeError:“functools._lru_cache_wrapper”对象没有属性 带有处理程序 get_key 的函数 GET_KEY 中的“__code__”
好吧,结果有一个简单的解决方案:我创建了一个用缓存装饰器包装的附加函数,并更改了句柄函数来调用它:
create or replace function get_key(which varchar) returns varchar
language python runtime_version = '3.11'
packages = ('snowflake-snowpark-python')
handler = 'main'
AS $$
import functools
@functools.cache
def get_key(which):
if which == 'PN':
return 'toomanysecrets'
else:
return ''
def main(which):
return get_key(which)
$$;