numpy 尝试缓存结果时出现Joblib用户警告

y3bcpkx1  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(174)

在尝试使用joblib缓存结果时,我得到以下UserWarning

import numpy
from tempfile import mkdtemp
cachedir = mkdtemp()
from joblib import Memory
memory = Memory(cachedir=cachedir, verbose=0)

@memory.cache
def get_nc_var3d(path_nc, var, year):
    """
    Get value from netcdf for variable var for year
    :param path_nc:
    :param var:
    :param year:
    :return:
    """
    try:
        hndl_nc = open_or_die(path_nc)
        val = hndl_nc.variables[var][int(year), :, :]
    except:
        val = numpy.nan
        logger.info('Error in getting var ' + var + ' for year ' + str(year) + ' from netcdf ')
    
    hndl_nc.close()
    return val

使用参数调用此函数时收到以下警告:

UserWarning: Persisting input arguments took 0.58s to run.
If this happens often in your code, it can cause performance problems 
(results will be correct in all cases). 
The reason for this is probably some large input arguments for a wrapped function (e.g. large strings).
THIS IS A JOBLIB ISSUE. If you can, kindly provide the joblib's team with an example so that they can fix the problem.

输入参数:C:/Users/rit/Documents/PhD/Projects/\GLA/Input/LUWH/\LUWLAN_v1.0h\transit_model.nc range_to_large 1150
我如何消除警告?为什么它会发生,因为输入参数不是太长?

3okqufwl

3okqufwl1#

我无法回答问题中的“为什么这不起作用?”部分。但是,要简单地忽略警告,可以将warnings.catch_warningswarnings.simplefilter一起使用,如下所示。

import warnings

with warnings.catch_warnings():
  warnings.simplefilter("ignore")
  your_code()

显然,我不建议忽略警告,除非您确定它无害,但如果您要这样做,则只会在上下文管理器中抑制警告,并且直接从python文档中删除

a5g8bdjr

a5g8bdjr2#

使用者警告:持久化输入参数花费了0.58秒的运行时间。如果在您的代码中经常发生这种情况,可能会导致性能问题(在所有情况下结果都是正确的)。出现这种情况的原因可能是 Package 函数的一些较大的输入参数(例如,较大的字符串)。这是一个JOBLIB问题。如果可以,请为joblib的团队提供一个示例,以便他们可以解决此问题。
警告本身是不言自明的,在我的拙见。它可能是在您的代码问题,您可以尝试减少输入大小,或者您可以与joblib团队共享您的报告,以便他们可以帮助改进joblib或建议您更好的使用方法,以避免这种类型的性能警告。

相关问题