使用 @functools.cache 修饰 Python 存储过程处理程序时出现问题

问题描述 投票:0回答:1

我正在构建一个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__”

snowflake-cloud-data-platform
1个回答
0
投票

好吧,结果有一个简单的解决方案:我创建了一个用缓存装饰器包装的附加函数,并更改了句柄函数来调用它:

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)
$$;

© www.soinside.com 2019 - 2024. All rights reserved.